aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorEric W. Biederman <ebiederm@xmission.com>2012-02-07 19:47:26 -0500
committerEric W. Biederman <ebiederm@xmission.com>2012-09-13 17:32:24 -0400
commit5fce5e0bbd44263c36f58ad1113b599d06ed1978 (patch)
tree1864cb5740d44f1e16d373e69fca5eb54e449213 /drivers
parent1efdb69b0bb41dec8ee3e2cac0a0f167837d0919 (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.c3
-rw-r--r--drivers/gpu/drm/drm_info.c5
-rw-r--r--drivers/gpu/drm/drm_ioctl.c4
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);