提交 5fce5e0b 编写于 作者: E Eric W. Biederman

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: NDave Airlie <airlied@redhat.com>
Acked-by: NSerge Hallyn <serge.hallyn@canonical.com>
Signed-off-by: NEric W. Biederman <ebiederm@xmission.com>
上级 1efdb69b
...@@ -251,7 +251,7 @@ static int drm_open_helper(struct inode *inode, struct file *filp, ...@@ -251,7 +251,7 @@ static int drm_open_helper(struct inode *inode, struct file *filp,
filp->private_data = priv; filp->private_data = priv;
priv->filp = filp; priv->filp = filp;
priv->uid = current_euid(); 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->minor = idr_find(&drm_minors_idr, minor_id);
priv->ioctl_count = 0; priv->ioctl_count = 0;
/* for compatibility root is always authenticated */ /* for compatibility root is always authenticated */
...@@ -524,6 +524,7 @@ int drm_release(struct inode *inode, struct file *filp) ...@@ -524,6 +524,7 @@ int drm_release(struct inode *inode, struct file *filp)
if (drm_core_check_feature(dev, DRIVER_PRIME)) if (drm_core_check_feature(dev, DRIVER_PRIME))
drm_prime_destroy_file_private(&file_priv->prime); drm_prime_destroy_file_private(&file_priv->prime);
put_pid(file_priv->pid);
kfree(file_priv); kfree(file_priv);
/* ======================================================== /* ========================================================
......
...@@ -191,8 +191,9 @@ int drm_clients_info(struct seq_file *m, void *data) ...@@ -191,8 +191,9 @@ int drm_clients_info(struct seq_file *m, void *data)
seq_printf(m, "%c %3d %5d %5d %10u %10lu\n", seq_printf(m, "%c %3d %5d %5d %10u %10lu\n",
priv->authenticated ? 'y' : 'n', priv->authenticated ? 'y' : 'n',
priv->minor->index, priv->minor->index,
priv->pid, pid_vnr(priv->pid),
priv->uid, priv->magic, priv->ioctl_count); from_kuid_munged(seq_user_ns(m), priv->uid),
priv->magic, priv->ioctl_count);
} }
mutex_unlock(&dev->struct_mutex); mutex_unlock(&dev->struct_mutex);
return 0; return 0;
......
...@@ -215,8 +215,8 @@ int drm_getclient(struct drm_device *dev, void *data, ...@@ -215,8 +215,8 @@ int drm_getclient(struct drm_device *dev, void *data,
list_for_each_entry(pt, &dev->filelist, lhead) { list_for_each_entry(pt, &dev->filelist, lhead) {
if (i++ >= idx) { if (i++ >= idx) {
client->auth = pt->authenticated; client->auth = pt->authenticated;
client->pid = pt->pid; client->pid = pid_vnr(pt->pid);
client->uid = pt->uid; client->uid = from_kuid_munged(current_user_ns(), pt->uid);
client->magic = pt->magic; client->magic = pt->magic;
client->iocs = pt->ioctl_count; client->iocs = pt->ioctl_count;
mutex_unlock(&dev->struct_mutex); mutex_unlock(&dev->struct_mutex);
......
...@@ -426,8 +426,8 @@ struct drm_prime_file_private { ...@@ -426,8 +426,8 @@ struct drm_prime_file_private {
/** File private data */ /** File private data */
struct drm_file { struct drm_file {
int authenticated; int authenticated;
pid_t pid; struct pid *pid;
uid_t uid; kuid_t uid;
drm_magic_t magic; drm_magic_t magic;
unsigned long ioctl_count; unsigned long ioctl_count;
struct list_head lhead; struct list_head lhead;
......
...@@ -936,7 +936,6 @@ config UIDGID_CONVERTED ...@@ -936,7 +936,6 @@ config UIDGID_CONVERTED
depends on QUOTA = n depends on QUOTA = n
depends on QUOTACTL = n depends on QUOTACTL = n
depends on BSD_PROCESS_ACCT = n depends on BSD_PROCESS_ACCT = n
depends on DRM = n
# Networking # Networking
depends on NET_9P = n depends on NET_9P = n
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册