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 /drivers | |
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>
Diffstat (limited to 'drivers')
-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 |
3 files changed, 7 insertions, 5 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); |