diff options
author | Ben Skeggs <bskeggs@redhat.com> | 2015-11-24 15:34:51 +1000 |
---|---|---|
committer | Ben Skeggs <bskeggs@redhat.com> | 2015-11-25 15:29:46 +1000 |
commit | 358c45c68e739e0e51b27169720d1252d9068560 (patch) | |
tree | 64d03b958b26e4d49217636b2620f1d9fcc34614 | |
parent | 47f4185bea5751b8440714599f72d2691c727780 (diff) |
nvif: allow userspace access to its own client object
Regression from "abi16: implement limited interoperability with
usif/nvif".
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
-rw-r--r-- | drm/nouveau/nouveau_drm.h | 4 | ||||
-rw-r--r-- | drm/nouveau/nouveau_usif.c | 5 |
2 files changed, 7 insertions, 2 deletions
diff --git a/drm/nouveau/nouveau_drm.h b/drm/nouveau/nouveau_drm.h index 3050042e..a02813e9 100644 --- a/drm/nouveau/nouveau_drm.h +++ b/drm/nouveau/nouveau_drm.h @@ -39,6 +39,7 @@ #include <nvif/client.h> #include <nvif/device.h> +#include <nvif/ioctl.h> #include <drmP.h> @@ -65,9 +66,10 @@ struct nouveau_drm_tile { }; enum nouveau_drm_object_route { - NVDRM_OBJECT_NVIF = 0, + NVDRM_OBJECT_NVIF = NVIF_IOCTL_V0_OWNER_NVIF, NVDRM_OBJECT_USIF, NVDRM_OBJECT_ABI16, + NVDRM_OBJECT_ANY = NVIF_IOCTL_V0_OWNER_ANY, }; enum nouveau_drm_notify_route { diff --git a/drm/nouveau/nouveau_usif.c b/drm/nouveau/nouveau_usif.c index 89dc4ce6..6ae1b349 100644 --- a/drm/nouveau/nouveau_usif.c +++ b/drm/nouveau/nouveau_usif.c @@ -313,7 +313,10 @@ usif_ioctl(struct drm_file *filp, void __user *user, u32 argc) if (nvif_unpack(argv->v0, 0, 0, true)) { /* block access to objects not created via this interface */ owner = argv->v0.owner; - argv->v0.owner = NVDRM_OBJECT_USIF; + if (argv->v0.object == 0ULL) + argv->v0.owner = NVDRM_OBJECT_ANY; /* except client */ + else + argv->v0.owner = NVDRM_OBJECT_USIF; } else goto done; |