diff mbox

[v2] drm: reduce GETCLIENT to a minimum

Message ID 20160825143505.7447-1-dh.herrmann@gmail.com (mailing list archive)
State New, archived
Headers show

Commit Message

David Herrmann Aug. 25, 2016, 2:35 p.m. UTC
The *only* known user of GETCLIENT is libva, which uses it to check
whether its own context is authenticated. It used to iterate all clients,
look for one that matches its own pid and then check its state.

The entire purpose for us to still have a GETCLIENT implementation is to
serve libva. So lets not pretend we do anything else: Make this function
return information on the caller's context only, fake the PID to the
caller's pid so they always match, and just fill in the "authenticated"
bit, nothing else.

This patch reduces the complexity of GETCLIENT to a bare minimum, avoids
any dependency on priv->uid or priv->pid (allows us to get rid of them),
and makes libva happy by always *exactly* returning the information it
wants.

Signed-off-by: David Herrmann <dh.herrmann@gmail.com>
---
v2: Just re-order the series and send individual patches, since they do
    not depend on each other.

 drivers/gpu/drm/drm_ioctl.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

Comments

Daniel Vetter Aug. 25, 2016, 2:58 p.m. UTC | #1
On Thu, Aug 25, 2016 at 04:35:05PM +0200, David Herrmann wrote:
> The *only* known user of GETCLIENT is libva, which uses it to check
> whether its own context is authenticated. It used to iterate all clients,
> look for one that matches its own pid and then check its state.
> 
> The entire purpose for us to still have a GETCLIENT implementation is to
> serve libva. So lets not pretend we do anything else: Make this function
> return information on the caller's context only, fake the PID to the
> caller's pid so they always match, and just fill in the "authenticated"
> bit, nothing else.
> 
> This patch reduces the complexity of GETCLIENT to a bare minimum, avoids
> any dependency on priv->uid or priv->pid (allows us to get rid of them),
> and makes libva happy by always *exactly* returning the information it
> wants.
> 
> Signed-off-by: David Herrmann <dh.herrmann@gmail.com>
> ---
> v2: Just re-order the series and send individual patches, since they do
>     not depend on each other.
> 
>  drivers/gpu/drm/drm_ioctl.c | 5 ++---
>  1 file changed, 2 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/gpu/drm/drm_ioctl.c b/drivers/gpu/drm/drm_ioctl.c
> index 33af4a5..bc5c65e 100644
> --- a/drivers/gpu/drm/drm_ioctl.c
> +++ b/drivers/gpu/drm/drm_ioctl.c
> @@ -189,9 +189,8 @@ static int drm_getclient(struct drm_device *dev, void *data,
>  	 */
>  	if (client->idx == 0) {
>  		client->auth = file_priv->authenticated;
> -		client->pid = pid_vnr(file_priv->pid);
> -		client->uid = from_kuid_munged(current_user_ns(),
> -					       file_priv->uid);
> +		client->pid = task_pid_vnr(current);
> +		client->uid = overflowuid;
>  		client->magic = 0;
>  		client->iocs = 0;

Merged to drm-misc, thanks.
-Daniel
diff mbox

Patch

diff --git a/drivers/gpu/drm/drm_ioctl.c b/drivers/gpu/drm/drm_ioctl.c
index 33af4a5..bc5c65e 100644
--- a/drivers/gpu/drm/drm_ioctl.c
+++ b/drivers/gpu/drm/drm_ioctl.c
@@ -189,9 +189,8 @@  static int drm_getclient(struct drm_device *dev, void *data,
 	 */
 	if (client->idx == 0) {
 		client->auth = file_priv->authenticated;
-		client->pid = pid_vnr(file_priv->pid);
-		client->uid = from_kuid_munged(current_user_ns(),
-					       file_priv->uid);
+		client->pid = task_pid_vnr(current);
+		client->uid = overflowuid;
 		client->magic = 0;
 		client->iocs = 0;