diff options
author | Eric W. Biederman <ebiederm@xmission.com> | 2012-02-07 19:47:26 -0500 |
---|---|---|
committer | Eric W. Biederman <ebiederm@xmission.com> | 2012-09-13 17:32:24 -0400 |
commit | 5fce5e0bbd44263c36f58ad1113b599d06ed1978 (patch) | |
tree | 1864cb5740d44f1e16d373e69fca5eb54e449213 | |
parent | 1efdb69b0bb41dec8ee3e2cac0a0f167837d0919 (diff) |
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: Dave Airlie <airlied@redhat.com>
Acked-by: Serge Hallyn <serge.hallyn@canonical.com>
Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
-rw-r--r-- | drivers/gpu/drm/drm_fops.c | 3 | ||||
-rw-r--r-- | drivers/gpu/drm/drm_info.c | 5 | ||||
-rw-r--r-- | drivers/gpu/drm/drm_ioctl.c | 4 | ||||
-rw-r--r-- | include/drm/drmP.h | 4 | ||||
-rw-r--r-- | init/Kconfig | 1 |
5 files changed, 9 insertions, 8 deletions
diff --git a/drivers/gpu/drm/drm_fops.c b/drivers/gpu/drm/drm_fops.c index 5062eec673f1..433d2fad1fe6 100644 --- a/drivers/gpu/drm/drm_fops.c +++ b/drivers/gpu/drm/drm_fops.c | |||
@@ -251,7 +251,7 @@ static int drm_open_helper(struct inode *inode, struct file *filp, | |||
251 | filp->private_data = priv; | 251 | filp->private_data = priv; |
252 | priv->filp = filp; | 252 | priv->filp = filp; |
253 | priv->uid = current_euid(); | 253 | priv->uid = current_euid(); |
254 | priv->pid = task_pid_nr(current); | 254 | priv->pid = get_pid(task_pid(current)); |
255 | priv->minor = idr_find(&drm_minors_idr, minor_id); | 255 | priv->minor = idr_find(&drm_minors_idr, minor_id); |
256 | priv->ioctl_count = 0; | 256 | priv->ioctl_count = 0; |
257 | /* for compatibility root is always authenticated */ | 257 | /* for compatibility root is always authenticated */ |
@@ -524,6 +524,7 @@ int drm_release(struct inode *inode, struct file *filp) | |||
524 | if (drm_core_check_feature(dev, DRIVER_PRIME)) | 524 | if (drm_core_check_feature(dev, DRIVER_PRIME)) |
525 | drm_prime_destroy_file_private(&file_priv->prime); | 525 | drm_prime_destroy_file_private(&file_priv->prime); |
526 | 526 | ||
527 | put_pid(file_priv->pid); | ||
527 | kfree(file_priv); | 528 | kfree(file_priv); |
528 | 529 | ||
529 | /* ======================================================== | 530 | /* ======================================================== |
diff --git a/drivers/gpu/drm/drm_info.c b/drivers/gpu/drm/drm_info.c index 8928edbb94c7..eb0af393e6e2 100644 --- a/drivers/gpu/drm/drm_info.c +++ b/drivers/gpu/drm/drm_info.c | |||
@@ -191,8 +191,9 @@ int drm_clients_info(struct seq_file *m, void *data) | |||
191 | seq_printf(m, "%c %3d %5d %5d %10u %10lu\n", | 191 | seq_printf(m, "%c %3d %5d %5d %10u %10lu\n", |
192 | priv->authenticated ? 'y' : 'n', | 192 | priv->authenticated ? 'y' : 'n', |
193 | priv->minor->index, | 193 | priv->minor->index, |
194 | priv->pid, | 194 | pid_vnr(priv->pid), |
195 | priv->uid, priv->magic, priv->ioctl_count); | 195 | from_kuid_munged(seq_user_ns(m), priv->uid), |
196 | priv->magic, priv->ioctl_count); | ||
196 | } | 197 | } |
197 | mutex_unlock(&dev->struct_mutex); | 198 | mutex_unlock(&dev->struct_mutex); |
198 | return 0; | 199 | return 0; |
diff --git a/drivers/gpu/drm/drm_ioctl.c b/drivers/gpu/drm/drm_ioctl.c index 64a62c697313..39a43834cef9 100644 --- a/drivers/gpu/drm/drm_ioctl.c +++ b/drivers/gpu/drm/drm_ioctl.c | |||
@@ -215,8 +215,8 @@ int drm_getclient(struct drm_device *dev, void *data, | |||
215 | list_for_each_entry(pt, &dev->filelist, lhead) { | 215 | list_for_each_entry(pt, &dev->filelist, lhead) { |
216 | if (i++ >= idx) { | 216 | if (i++ >= idx) { |
217 | client->auth = pt->authenticated; | 217 | client->auth = pt->authenticated; |
218 | client->pid = pt->pid; | 218 | client->pid = pid_vnr(pt->pid); |
219 | client->uid = pt->uid; | 219 | client->uid = from_kuid_munged(current_user_ns(), pt->uid); |
220 | client->magic = pt->magic; | 220 | client->magic = pt->magic; |
221 | client->iocs = pt->ioctl_count; | 221 | client->iocs = pt->ioctl_count; |
222 | mutex_unlock(&dev->struct_mutex); | 222 | mutex_unlock(&dev->struct_mutex); |
diff --git a/include/drm/drmP.h b/include/drm/drmP.h index d6b67bb9075f..9bc5c6a1d52c 100644 --- a/include/drm/drmP.h +++ b/include/drm/drmP.h | |||
@@ -426,8 +426,8 @@ struct drm_prime_file_private { | |||
426 | /** File private data */ | 426 | /** File private data */ |
427 | struct drm_file { | 427 | struct drm_file { |
428 | int authenticated; | 428 | int authenticated; |
429 | pid_t pid; | 429 | struct pid *pid; |
430 | uid_t uid; | 430 | kuid_t uid; |
431 | drm_magic_t magic; | 431 | drm_magic_t magic; |
432 | unsigned long ioctl_count; | 432 | unsigned long ioctl_count; |
433 | struct list_head lhead; | 433 | struct list_head lhead; |
diff --git a/init/Kconfig b/init/Kconfig index d09738dee238..6db6e751c5f3 100644 --- a/init/Kconfig +++ b/init/Kconfig | |||
@@ -936,7 +936,6 @@ config UIDGID_CONVERTED | |||
936 | depends on QUOTA = n | 936 | depends on QUOTA = n |
937 | depends on QUOTACTL = n | 937 | depends on QUOTACTL = n |
938 | depends on BSD_PROCESS_ACCT = n | 938 | depends on BSD_PROCESS_ACCT = n |
939 | depends on DRM = n | ||
940 | 939 | ||
941 | # Networking | 940 | # Networking |
942 | depends on NET_9P = n | 941 | depends on NET_9P = n |