]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
drm/ioc32: stop speculation on the drm_compat_ioctl path
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 24 Mar 2026 16:42:51 +0000 (17:42 +0100)
committerThomas Zimmermann <tzimmermann@suse.de>
Thu, 2 Apr 2026 06:24:55 +0000 (08:24 +0200)
The drm compat ioctl path takes a user controlled pointer, and then
dereferences it into a table of function pointers, the signature method
of spectre problems.  Fix this up by calling array_index_nospec() on the
index to the function pointer list.

Fixes: 505b5240329b ("drm/ioctl: Fix Spectre v1 vulnerabilities")
Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Cc: Maxime Ripard <mripard@kernel.org>
Cc: Thomas Zimmermann <tzimmermann@suse.de>
Cc: David Airlie <airlied@gmail.com>
Cc: Simona Vetter <simona@ffwll.ch>
Cc: stable <stable@kernel.org>
Assisted-by: gkh_clanker_2000
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Acked-by: Thomas Zimmermann <tzimmermann@suse.de>
Acked-by: Maxime Ripard <mripard@kernel.org>
Reviewed-by: Simona Vetter <simona@ffwll.ch>
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Link: https://patch.msgid.link/2026032451-playing-rummage-8fa2@gregkh
drivers/gpu/drm/drm_ioc32.c

index e6b5b06de1487be0f9b0a08892e341a49750534b..f3e40d1e6098b8ec206fa7eb88cbcdffffeca672 100644 (file)
@@ -28,6 +28,7 @@
  * IN THE SOFTWARE.
  */
 #include <linux/compat.h>
+#include <linux/nospec.h>
 #include <linux/ratelimit.h>
 #include <linux/export.h>
 
@@ -374,6 +375,7 @@ long drm_compat_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
        if (nr >= ARRAY_SIZE(drm_compat_ioctls))
                return drm_ioctl(filp, cmd, arg);
 
+       nr = array_index_nospec(nr, ARRAY_SIZE(drm_compat_ioctls));
        fn = drm_compat_ioctls[nr].fn;
        if (!fn)
                return drm_ioctl(filp, cmd, arg);