drm: Return -ENOTTY for non-drm ioctls
authorjsg <jsg@openbsd.org>
Thu, 29 Jul 2021 03:09:17 +0000 (03:09 +0000)
committerjsg <jsg@openbsd.org>
Thu, 29 Jul 2021 03:09:17 +0000 (03:09 +0000)
From Charles Baylis
69a603aa170e1c145b93d5d7efcca83a8b1268fe in linux 5.10.y/5.10.54
3abab27c322e0f2acf981595aa8040c9164dc9fb in mainline linux

sys/dev/pci/drm/drm_ioctl.c
sys/dev/pci/drm/include/drm/drm_ioctl.h

index 336b8a3..c0b6abd 100644 (file)
@@ -902,6 +902,9 @@ long drm_ioctl(struct file *filp,
        if (drm_dev_is_unplugged(dev))
                return -ENODEV;
 
+       if (DRM_IOCTL_TYPE(cmd) != DRM_IOCTL_BASE)
+               return -ENOTTY;
+
        is_driver_ioctl = nr >= DRM_COMMAND_BASE && nr < DRM_COMMAND_END;
 
        if (is_driver_ioctl) {
index ca79b07..b597ec6 100644 (file)
@@ -69,9 +69,11 @@ typedef int drm_ioctl_compat_t(struct file *filp, unsigned int cmd,
 
 #ifdef __linux__
 #define DRM_IOCTL_NR(n)                _IOC_NR(n)
+#define DRM_IOCTL_TYPE(n)              _IOC_TYPE(n)
 #define DRM_MAJOR       226
 #else
 #define DRM_IOCTL_NR(n)                        ((n) & 0xff)
+#define DRM_IOCTL_TYPE(n)              IOCGROUP(n)
 #endif
 
 /**