Message ID | 87mx1iecwi.fsf@xmission.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
> 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. > Hi Eric, I'm fine with this seems okay, do you want me to merge it via drm-next? Dave. > Cc: David Airlie <airlied@linux.ie> > Cc: dri-devel@lists.freedesktop.org > Acked-by: Serge Hallyn <serge.hallyn@canonical.com> > Signed-off-by: Eric W. Biederman <ebiederm@xmission.com> > --- > drivers/gpu/drm/drm_fops.c | 3 ++- > drivers/gpu/drm/drm_info.c | 5 +++-- > drivers/gpu/drm/drm_ioctl.c | 4 ++-- > include/drm/drmP.h | 4 ++-- > 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 5062eec..433d2fa 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, > 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); > > /* ======================================================== > diff --git a/drivers/gpu/drm/drm_info.c b/drivers/gpu/drm/drm_info.c > index 8928edb..eb0af39 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) > 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; > diff --git a/drivers/gpu/drm/drm_ioctl.c b/drivers/gpu/drm/drm_ioctl.c > index 64a62c6..39a4383 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, > 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); > diff --git a/include/drm/drmP.h b/include/drm/drmP.h > index d6b67bb..9bc5c6a 100644 > --- a/include/drm/drmP.h > +++ b/include/drm/drmP.h > @@ -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; > diff --git a/init/Kconfig b/init/Kconfig > index d849ba2..2a388e5 100644 > --- a/init/Kconfig > +++ b/init/Kconfig > @@ -930,7 +930,6 @@ config UIDGID_CONVERTED > depends on FS_POSIX_ACL = n > depends on QUOTA = n > depends on QUOTACTL = n > - depends on DRM = n > > # Networking > depends on NET_9P = n > -- > 1.7.5.4 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > Please read the FAQ at http://www.tux.org/lkml/
Dave Airlie <airlied@gmail.com> writes: >> 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. >> > > Hi Eric, > > I'm fine with this seems okay, do you want me to merge it via > drm-next? My plan is to merge it via my user namespace tree. And since you have responed positively I will add your acked-by. There are some nice synergies when I get all of the changes in one tree. If for some reason you want to carry this in your drm tree we can work something out. In this case I expect the change isn't big enough to worry about. Eric
On Thu, Sep 13, 2012 at 12:14 PM, Eric W. Biederman <ebiederm@xmission.com> wrote: > Dave Airlie <airlied@gmail.com> writes: > >>> 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. >>> >> >> Hi Eric, >> >> I'm fine with this seems okay, do you want me to merge it via >> drm-next? > > My plan is to merge it via my user namespace tree. And since you have > responed positively I will add your acked-by. There are some nice > synergies when I get all of the changes in one tree. > > If for some reason you want to carry this in your drm tree we can work > something out. > > In this case I expect the change isn't big enough to worry about. No all fine by me, for formality sake: Acked-by: Dave Airlie <airlied@redhat.com>
diff --git a/drivers/gpu/drm/drm_fops.c b/drivers/gpu/drm/drm_fops.c index 5062eec..433d2fa 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, 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); /* ======================================================== diff --git a/drivers/gpu/drm/drm_info.c b/drivers/gpu/drm/drm_info.c index 8928edb..eb0af39 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) 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; diff --git a/drivers/gpu/drm/drm_ioctl.c b/drivers/gpu/drm/drm_ioctl.c index 64a62c6..39a4383 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, 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); diff --git a/include/drm/drmP.h b/include/drm/drmP.h index d6b67bb..9bc5c6a 100644 --- a/include/drm/drmP.h +++ b/include/drm/drmP.h @@ -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; diff --git a/init/Kconfig b/init/Kconfig index d849ba2..2a388e5 100644 --- a/init/Kconfig +++ b/init/Kconfig @@ -930,7 +930,6 @@ config UIDGID_CONVERTED depends on FS_POSIX_ACL = n depends on QUOTA = n depends on QUOTACTL = n - depends on DRM = n # Networking depends on NET_9P = n