Commit 5fce5e0b authored by Eric W. Biederman's avatar Eric W. Biederman
Browse files

userns: Convert drm to use kuid and kgid and struct pid where appropriate



Blink Blink this had not been converted to use struct pid ages ago?

- On drm open capture the openers kuid and struct pid.
- On drm close release the kuid and struct pid
- When reporting the uid and pid convert the kuid and struct pid
  into values in the appropriate namespace.

Cc: dri-devel@lists.freedesktop.org
Acked-by: default avatarDave Airlie <airlied@redhat.com>
Acked-by: default avatarSerge Hallyn <serge.hallyn@canonical.com>
Signed-off-by: default avatarEric W. Biederman <ebiederm@xmission.com>
parent 1efdb69b
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -251,7 +251,7 @@ static int drm_open_helper(struct inode *inode, struct file *filp,
	filp->private_data = priv;
	priv->filp = filp;
	priv->uid = current_euid();
	priv->pid = task_pid_nr(current);
	priv->pid = get_pid(task_pid(current));
	priv->minor = idr_find(&drm_minors_idr, minor_id);
	priv->ioctl_count = 0;
	/* for compatibility root is always authenticated */
@@ -524,6 +524,7 @@ int drm_release(struct inode *inode, struct file *filp)
	if (drm_core_check_feature(dev, DRIVER_PRIME))
		drm_prime_destroy_file_private(&file_priv->prime);

	put_pid(file_priv->pid);
	kfree(file_priv);

	/* ========================================================
+3 −2
Original line number Diff line number Diff line
@@ -191,8 +191,9 @@ int drm_clients_info(struct seq_file *m, void *data)
		seq_printf(m, "%c %3d %5d %5d %10u %10lu\n",
			   priv->authenticated ? 'y' : 'n',
			   priv->minor->index,
			   priv->pid,
			   priv->uid, priv->magic, priv->ioctl_count);
			   pid_vnr(priv->pid),
			   from_kuid_munged(seq_user_ns(m), priv->uid),
			   priv->magic, priv->ioctl_count);
	}
	mutex_unlock(&dev->struct_mutex);
	return 0;
+2 −2
Original line number Diff line number Diff line
@@ -215,8 +215,8 @@ int drm_getclient(struct drm_device *dev, void *data,
	list_for_each_entry(pt, &dev->filelist, lhead) {
		if (i++ >= idx) {
			client->auth = pt->authenticated;
			client->pid = pt->pid;
			client->uid = pt->uid;
			client->pid = pid_vnr(pt->pid);
			client->uid = from_kuid_munged(current_user_ns(), pt->uid);
			client->magic = pt->magic;
			client->iocs = pt->ioctl_count;
			mutex_unlock(&dev->struct_mutex);
+2 −2
Original line number Diff line number Diff line
@@ -426,8 +426,8 @@ struct drm_prime_file_private {
/** File private data */
struct drm_file {
	int authenticated;
	pid_t pid;
	uid_t uid;
	struct pid *pid;
	kuid_t uid;
	drm_magic_t magic;
	unsigned long ioctl_count;
	struct list_head lhead;
+0 −1
Original line number Diff line number Diff line
@@ -936,7 +936,6 @@ config UIDGID_CONVERTED
	depends on QUOTA = n
	depends on QUOTACTL = n
	depends on BSD_PROCESS_ACCT = n
	depends on DRM = n

	# Networking
	depends on NET_9P = n