2019-09-04 17:01:23 +00:00
|
|
|
From 38287ab40da441726d5394c65021d170a2e6840f Mon Sep 17 00:00:00 2001
|
2019-07-09 18:32:28 +00:00
|
|
|
From: Dave Stevenson <dave.stevenson@raspberrypi.org>
|
|
|
|
Date: Thu, 24 Jan 2019 13:56:30 +0000
|
2019-09-04 17:01:23 +00:00
|
|
|
Subject: [PATCH 311/782] char: vcio: Add compat ioctl handling
|
2019-07-09 18:32:28 +00:00
|
|
|
|
|
|
|
There was no compat ioctl handler, so 32 bit userspace on a
|
|
|
|
64 bit kernel failed as IOCTL_MBOX_PROPERTY used the size
|
|
|
|
of char*.
|
|
|
|
|
|
|
|
Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.org>
|
|
|
|
---
|
|
|
|
drivers/char/broadcom/vcio.c | 22 +++++++++++++++++++++-
|
|
|
|
1 file changed, 21 insertions(+), 1 deletion(-)
|
|
|
|
|
|
|
|
--- a/drivers/char/broadcom/vcio.c
|
|
|
|
+++ b/drivers/char/broadcom/vcio.c
|
|
|
|
@@ -24,6 +24,9 @@
|
|
|
|
|
|
|
|
#define VCIO_IOC_MAGIC 100
|
|
|
|
#define IOCTL_MBOX_PROPERTY _IOWR(VCIO_IOC_MAGIC, 0, char *)
|
|
|
|
+#ifdef CONFIG_COMPAT
|
|
|
|
+#define IOCTL_MBOX_PROPERTY32 _IOWR(VCIO_IOC_MAGIC, 0, compat_uptr_t)
|
|
|
|
+#endif
|
|
|
|
|
|
|
|
static struct {
|
|
|
|
dev_t devt;
|
|
|
|
@@ -87,13 +90,30 @@ static long vcio_device_ioctl(struct fil
|
|
|
|
case IOCTL_MBOX_PROPERTY:
|
|
|
|
return vcio_user_property_list((void *)ioctl_param);
|
|
|
|
default:
|
|
|
|
- pr_err("unknown ioctl: %d\n", ioctl_num);
|
|
|
|
+ pr_err("unknown ioctl: %x\n", ioctl_num);
|
|
|
|
return -EINVAL;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
+#ifdef CONFIG_COMPAT
|
|
|
|
+static long vcio_device_compat_ioctl(struct file *file, unsigned int ioctl_num,
|
|
|
|
+ unsigned long ioctl_param)
|
|
|
|
+{
|
|
|
|
+ switch (ioctl_num) {
|
|
|
|
+ case IOCTL_MBOX_PROPERTY32:
|
|
|
|
+ return vcio_user_property_list(compat_ptr(ioctl_param));
|
|
|
|
+ default:
|
|
|
|
+ pr_err("unknown ioctl: %x\n", ioctl_num);
|
|
|
|
+ return -EINVAL;
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+#endif
|
|
|
|
+
|
|
|
|
const struct file_operations vcio_fops = {
|
|
|
|
.unlocked_ioctl = vcio_device_ioctl,
|
|
|
|
+#ifdef CONFIG_COMPAT
|
|
|
|
+ .compat_ioctl = vcio_device_compat_ioctl,
|
|
|
|
+#endif
|
|
|
|
.open = vcio_device_open,
|
|
|
|
.release = vcio_device_release,
|
|
|
|
};
|