summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Zhang <markz@nvidia.com>2017-08-04 10:32:38 +0800
committerAdrian Salido <salidoa@google.com>2017-08-17 13:58:43 -0700
commit40286163f84a29993c2f552a237256541875a1b4 (patch)
treea30e19365bcefbde7e54dfa9baf73df333dfe54f
parent77d06077f621fde3b337838aec67865dd9f3267b (diff)
downloadtegra-40286163f84a29993c2f552a237256541875a1b4.tar.gz
nouveau: Check userspace pointer before dereference
Bug: 38415808 Change-Id: I60bedcb9cf706df91f3fc27c682d0dda26d1b416 Signed-off-by: Mark Zhang <markz@nvidia.com>
-rw-r--r--drivers/gpu/drm/nouveau/nouveau_usif.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/drivers/gpu/drm/nouveau/nouveau_usif.c b/drivers/gpu/drm/nouveau/nouveau_usif.c
index cb1182d7e80e..8d4fcc17b2b4 100644
--- a/drivers/gpu/drm/nouveau/nouveau_usif.c
+++ b/drivers/gpu/drm/nouveau/nouveau_usif.c
@@ -316,6 +316,12 @@ usif_ioctl(struct drm_file *filp, void __user *user, u32 argc)
} else
goto done;
+ object = (void *)(unsigned long)argv->v0.token;
+ if (!access_ok(VERIFY_READ, object, sizeof(struct usif_object))) {
+ ret = -EINVAL;
+ goto done;
+ }
+
mutex_lock(&cli->mutex);
switch (argv->v0.type) {
case NVIF_IOCTL_V0_NEW:
@@ -340,7 +346,6 @@ usif_ioctl(struct drm_file *filp, void __user *user, u32 argc)
break;
}
if (argv->v0.route == NVDRM_OBJECT_USIF) {
- object = (void *)(unsigned long)argv->v0.token;
argv->v0.route = object->route;
argv->v0.token = object->token;
if (ret == 0 && argv->v0.type == NVIF_IOCTL_V0_DEL) {