| From 3abab27c322e0f2acf981595aa8040c9164dc9fb Mon Sep 17 00:00:00 2001 |
| From: Charles Baylis <cb-kernel@fishzet.co.uk> |
| Date: Fri, 16 Jul 2021 17:43:12 +0100 |
| Subject: drm: Return -ENOTTY for non-drm ioctls |
| |
| From: Charles Baylis <cb-kernel@fishzet.co.uk> |
| |
| commit 3abab27c322e0f2acf981595aa8040c9164dc9fb upstream. |
| |
| drm: Return -ENOTTY for non-drm ioctls |
| |
| Return -ENOTTY from drm_ioctl() when userspace passes in a cmd number |
| which doesn't relate to the drm subsystem. |
| |
| Glibc uses the TCGETS ioctl to implement isatty(), and without this |
| change isatty() returns it incorrectly returns true for drm devices. |
| |
| To test run this command: |
| $ if [ -t 0 ]; then echo is a tty; fi < /dev/dri/card0 |
| which shows "is a tty" without this patch. |
| |
| This may also modify memory which the userspace application is not |
| expecting. |
| |
| Signed-off-by: Charles Baylis <cb-kernel@fishzet.co.uk> |
| Cc: stable@vger.kernel.org |
| Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> |
| Link: https://patchwork.freedesktop.org/patch/msgid/YPG3IBlzaMhfPqCr@stando.fishzet.co.uk |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/gpu/drm/drm_ioctl.c | 3 +++ |
| include/drm/drm_ioctl.h | 1 + |
| 2 files changed, 4 insertions(+) |
| |
| --- a/drivers/gpu/drm/drm_ioctl.c |
| +++ b/drivers/gpu/drm/drm_ioctl.c |
| @@ -827,6 +827,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) { |
| --- a/include/drm/drm_ioctl.h |
| +++ b/include/drm/drm_ioctl.h |
| @@ -68,6 +68,7 @@ typedef int drm_ioctl_compat_t(struct fi |
| unsigned long arg); |
| |
| #define DRM_IOCTL_NR(n) _IOC_NR(n) |
| +#define DRM_IOCTL_TYPE(n) _IOC_TYPE(n) |
| #define DRM_MAJOR 226 |
| |
| /** |