I was confused shortly whether the compat was needed for the int,
until I noticed the pointer in the original.

Also remove typedef.

v2: Review from Chris.
- Add comments.
- Also change the int param in the original structure.

Cc: Chris Wilson <[email protected]>
Signed-off-by: Daniel Vetter <[email protected]>
---
 drivers/gpu/drm/i915/i915_ioc32.c | 13 +++++++++----
 include/uapi/drm/i915_drm.h       |  6 +++++-
 2 files changed, 14 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_ioc32.c 
b/drivers/gpu/drm/i915/i915_ioc32.c
index 6eec2221b44e..a5a2d5b3f44b 100644
--- a/drivers/gpu/drm/i915/i915_ioc32.c
+++ b/drivers/gpu/drm/i915/i915_ioc32.c
@@ -35,15 +35,20 @@
 #include <drm/i915_drm.h>
 #include "i915_drv.h"
 
-typedef struct drm_i915_getparam32 {
-       int param;
+struct drm_i915_getparam32 {
+       s32 param;
+       /*
+        * We screwed up the generic ioctl struct here and used a variable-sized
+        * pointer. Use u32 in the compat struct to match the 32bit pointer
+        * userspace expects.
+        */
        u32 value;
-} drm_i915_getparam32_t;
+};
 
 static int compat_i915_getparam(struct file *file, unsigned int cmd,
                                unsigned long arg)
 {
-       drm_i915_getparam32_t req32;
+       struct drm_i915_getparam32 req32;
        drm_i915_getparam_t __user *request;
 
        if (copy_from_user(&req32, (void __user *)arg, sizeof(req32)))
diff --git a/include/uapi/drm/i915_drm.h b/include/uapi/drm/i915_drm.h
index e7c29f1659ad..192027b4f031 100644
--- a/include/uapi/drm/i915_drm.h
+++ b/include/uapi/drm/i915_drm.h
@@ -358,7 +358,11 @@ typedef struct drm_i915_irq_wait {
 #define I915_PARAM_HAS_RESOURCE_STREAMER 36
 
 typedef struct drm_i915_getparam {
-       int param;
+       s32 param;
+       /*
+        * WARNING: Using pointers instead of fixed-size u64 means we need to 
write
+        * compat32 code. Don't repeat this mistake.
+        */
        int __user *value;
 } drm_i915_getparam_t;
 
-- 
2.1.4

_______________________________________________
Intel-gfx mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to