]> git.hungrycats.org Git - linux/commitdiff
[PATCH] use size_t for the broken ioctl numbers
authorMatthew Wilcox <willy@debian.org>
Sun, 7 Sep 2003 02:43:46 +0000 (19:43 -0700)
committerLinus Torvalds <torvalds@home.osdl.org>
Sun, 7 Sep 2003 02:43:46 +0000 (19:43 -0700)
The ioctl number-generating macros should be used like

#define XXXX _IOR(n,x,type-of-arg)

which generates an ioctl number that has the size of the argument
encoded within it.  But there are a number of ioctl #defines that look
like

#define XXXX _IOR(n,x,sizeof(type-of-arg))

which is very wrong: the _IO/_IOR/_IOW/_IOWR macros will do the sizeof()
on the argtype themselves, so the end result is that we will be doing a
sizeof(sizeof(argtype)), ie a sizeof(size_t).

In other words, the argtype didn't matter at all, and ended up totally
pointless.

Clearly it's too late to change the ioctl definitions, but we can at
least stop people from copying them and making the same mistake.

Documentation/ioctl-number.txt
include/linux/coda.h
include/linux/fs.h
include/linux/i8k.h
include/linux/if_pppox.h
include/linux/input.h
include/linux/matroxfb.h
include/linux/pmu.h
include/linux/radeonfb.h

index 5264d462e61560f9667e101a5bc9d052e927b9b7..949c44ca49907c1aa94fd98a55e59b12f7b2204e 100644 (file)
@@ -30,7 +30,9 @@ I'll register one for you.
 The second argument to _IO, _IOW, _IOR, or _IOWR is a sequence number
 to distinguish ioctls from each other.  The third argument to _IOW,
 _IOR, or _IOWR is the type of the data going into the kernel or coming
-out of the kernel (e.g.  'int' or 'struct foo').
+out of the kernel (e.g.  'int' or 'struct foo').  NOTE!  Do NOT use
+sizeof(arg) as the third argument as this results in your ioctl thinking
+it passes an argument of type size_t.
 
 Some devices use their major number as the identifier; this is OK, as
 long as it is unique.  Some devices are irregular and don't follow any
index 0d168b715ed79922c1dcc803c27645bb7bf65fd4..0ea09388b1918fb4faf9855196823bf08c392bfa 100644 (file)
@@ -324,7 +324,7 @@ struct coda_statfs {
 #define VC_MAXMSGSIZE      sizeof(union inputArgs)+sizeof(union outputArgs) +\
                             VC_MAXDATASIZE  
 
-#define CIOC_KERNEL_VERSION _IOWR('c', 10, sizeof (int))
+#define CIOC_KERNEL_VERSION _IOWR('c', 10, size_t)
 
 #if 0
 #define CODA_KERNEL_VERSION 0 /* don't care about kernel version number */
index d10db09f616424956de4ff79c8f98559db694512..20a7b18b08414ba1cc49857d55b971038bd5bd8f 100644 (file)
@@ -188,15 +188,18 @@ extern int leases_enable, dir_notify_enable, lease_break_time;
 #define BLKSSZGET  _IO(0x12,104)/* get block device sector size */
 #if 0
 #define BLKPG      _IO(0x12,105)/* See blkpg.h */
-#define BLKELVGET  _IOR(0x12,106,sizeof(blkelv_ioctl_arg_t))/* elevator get */
-#define BLKELVSET  _IOW(0x12,107,sizeof(blkelv_ioctl_arg_t))/* elevator set */
+
+/* Some people are morons.  Do not use sizeof! */
+
+#define BLKELVGET  _IOR(0x12,106,size_t)/* elevator get */
+#define BLKELVSET  _IOW(0x12,107,size_t)/* elevator set */
 /* This was here just to show that the number is taken -
    probably all these _IO(0x12,*) ioctls should be moved to blkpg.h. */
 #endif
 /* A jump here: 108-111 have been used for various private purposes. */
-#define BLKBSZGET  _IOR(0x12,112,sizeof(int))
-#define BLKBSZSET  _IOW(0x12,113,sizeof(int))
-#define BLKGETSIZE64 _IOR(0x12,114,sizeof(u64))        /* return device size in bytes (u64 *arg) */
+#define BLKBSZGET  _IOR(0x12,112,size_t)
+#define BLKBSZSET  _IOW(0x12,113,size_t)
+#define BLKGETSIZE64 _IOR(0x12,114,size_t)     /* return device size in bytes (u64 *arg) */
 
 #define BMAP_IOCTL 1           /* obsolete - kept for compatibility */
 #define FIBMAP    _IO(0x00,1)  /* bmap access */
index a6d3b694a0cdb0302d76055c505866753e3eb2f2..8ae0873f6eaa1c29edc99b13413ee5e86082cc05 100644 (file)
 
 #define I8K_BIOS_VERSION       _IOR ('i', 0x80, 4)
 #define I8K_MACHINE_ID         _IOR ('i', 0x81, 16)
-#define I8K_POWER_STATUS       _IOR ('i', 0x82, sizeof(int))
-#define I8K_FN_STATUS          _IOR ('i', 0x83, sizeof(int))
-#define I8K_GET_TEMP           _IOR ('i', 0x84, sizeof(int))
-#define I8K_GET_SPEED          _IOWR('i', 0x85, sizeof(int))
-#define I8K_GET_FAN            _IOWR('i', 0x86, sizeof(int))
-#define I8K_SET_FAN            _IOWR('i', 0x87, sizeof(int)*2)
+#define I8K_POWER_STATUS       _IOR ('i', 0x82, size_t)
+#define I8K_FN_STATUS          _IOR ('i', 0x83, size_t)
+#define I8K_GET_TEMP           _IOR ('i', 0x84, size_t)
+#define I8K_GET_SPEED          _IOWR('i', 0x85, size_t)
+#define I8K_GET_FAN            _IOWR('i', 0x86, size_t)
+#define I8K_SET_FAN            _IOWR('i', 0x87, size_t)
 
 #define I8K_FAN_LEFT           1
 #define I8K_FAN_RIGHT          0
index 581531924426ef2e17cf6f267d3a389d93e05b9e..3348fc7f611e7bf17ee0f1a748bbb1f4246a3346 100644 (file)
@@ -67,9 +67,9 @@ struct sockaddr_pppox {
  *
  ********************************************************************/
 
-#define PPPOEIOCSFWD   _IOW(0xB1 ,0, sizeof(struct sockaddr_pppox))
+#define PPPOEIOCSFWD   _IOW(0xB1 ,0, size_t)
 #define PPPOEIOCDFWD   _IO(0xB1 ,1)
-/*#define PPPOEIOCGFWD _IOWR(0xB1,2, sizeof(struct sockaddr_pppox))*/
+/*#define PPPOEIOCGFWD _IOWR(0xB1,2, size_t)*/
 
 /* Codes to identify message types */
 #define PADI_CODE      0x09
index da49f7ee0f18219495452bc8fda790406c58eb81..770644b05c5953885ed51d7cfa5e109413cfebeb 100644 (file)
@@ -73,7 +73,7 @@ struct input_absinfo {
 #define EVIOCGABS(abs)         _IOR('E', 0x40 + abs, struct input_absinfo)             /* get abs value/limits */
 #define EVIOCSABS(abs)         _IOW('E', 0xc0 + abs, struct input_absinfo)             /* set abs value/limits */
 
-#define EVIOCSFF               _IOC(_IOC_WRITE, 'E', 0x80, sizeof(struct ff_effect))   /* send a force effect to a force feedback device */
+#define EVIOCSFF               _IOC(_IOC_WRITE, 'E', 0x80, size_t)     /* send a force effect to a force feedback device */
 #define EVIOCRMFF              _IOW('E', 0x81, int)                    /* Erase a force effect */
 #define EVIOCGEFFECTS          _IOR('E', 0x84, int)                    /* Report number of effects playable at the same time */
 
index 83fea12ad181a3b1aa3e98130d6c09e414d56eeb..ae5b09493062871abcccb9df8aa6700bde00390c 100644 (file)
@@ -15,21 +15,21 @@ struct matroxioc_output_mode {
 #define MATROXFB_OUTPUT_MODE_NTSC      0x0002
 #define MATROXFB_OUTPUT_MODE_MONITOR   0x0080
 };
-#define MATROXFB_SET_OUTPUT_MODE       _IOW('n',0xFA,sizeof(struct matroxioc_output_mode))
-#define MATROXFB_GET_OUTPUT_MODE       _IOWR('n',0xFA,sizeof(struct matroxioc_output_mode))
+#define MATROXFB_SET_OUTPUT_MODE       _IOW('n',0xFA,size_t)
+#define MATROXFB_GET_OUTPUT_MODE       _IOWR('n',0xFA,size_t)
 
 /* bitfield */
 #define MATROXFB_OUTPUT_CONN_PRIMARY   (1 << MATROXFB_OUTPUT_PRIMARY)
 #define MATROXFB_OUTPUT_CONN_SECONDARY (1 << MATROXFB_OUTPUT_SECONDARY)
 #define MATROXFB_OUTPUT_CONN_DFP       (1 << MATROXFB_OUTPUT_DFP)
 /* connect these outputs to this framebuffer */
-#define MATROXFB_SET_OUTPUT_CONNECTION _IOW('n',0xF8,sizeof(__u32))
+#define MATROXFB_SET_OUTPUT_CONNECTION _IOW('n',0xF8,size_t)
 /* which outputs are connected to this framebuffer */
-#define MATROXFB_GET_OUTPUT_CONNECTION _IOR('n',0xF8,sizeof(__u32))
+#define MATROXFB_GET_OUTPUT_CONNECTION _IOR('n',0xF8,size_t)
 /* which outputs are available for this framebuffer */
-#define MATROXFB_GET_AVAILABLE_OUTPUTS _IOR('n',0xF9,sizeof(__u32))
+#define MATROXFB_GET_AVAILABLE_OUTPUTS _IOR('n',0xF9,size_t)
 /* which outputs exist on this framebuffer */
-#define MATROXFB_GET_ALL_OUTPUTS       _IOR('n',0xFB,sizeof(__u32))
+#define MATROXFB_GET_ALL_OUTPUTS       _IOR('n',0xFB,size_t)
 
 enum matroxfb_ctrl_id {
   MATROXFB_CID_TESTOUT  = V4L2_CID_PRIVATE_BASE,
index bc331f946fec4b2e0cffd57c2376f3ebf495f074..818a84c1edffce5e67a581eb366ac0be9e8d5308 100644 (file)
@@ -122,15 +122,15 @@ enum {
 /* no param */
 #define PMU_IOC_SLEEP          _IO('B', 0)
 /* out param: u32*     backlight value: 0 to 15 */
-#define PMU_IOC_GET_BACKLIGHT  _IOR('B', 1, sizeof(__u32*))
+#define PMU_IOC_GET_BACKLIGHT  _IOR('B', 1, size_t)
 /* in param: u32       backlight value: 0 to 15 */
-#define PMU_IOC_SET_BACKLIGHT  _IOW('B', 2, sizeof(__u32))
+#define PMU_IOC_SET_BACKLIGHT  _IOW('B', 2, size_t)
 /* out param: u32*     PMU model */
-#define PMU_IOC_GET_MODEL      _IOR('B', 3, sizeof(__u32*))
+#define PMU_IOC_GET_MODEL      _IOR('B', 3, size_t)
 /* out param: u32*     has_adb: 0 or 1 */
-#define PMU_IOC_HAS_ADB                _IOR('B', 4, sizeof(__u32*)) 
+#define PMU_IOC_HAS_ADB                _IOR('B', 4, size_t) 
 /* out param: u32*     can_sleep: 0 or 1 */
-#define PMU_IOC_CAN_SLEEP      _IOR('B', 5, sizeof(__u32*)) 
+#define PMU_IOC_CAN_SLEEP      _IOR('B', 5, size_t) 
 /* no param */
 #define PMU_IOC_GRAB_BACKLIGHT _IOR('B', 6, 0) 
 
index 99bdf91bbc5d836a2bf5484a9c9edeacbd7fcda6..5bd8975ed78e3708df073420de52251790c8d507 100644 (file)
@@ -8,8 +8,8 @@
 #define ATY_RADEON_CRT_ON      0x00000002
 
 
-#define FBIO_RADEON_GET_MIRROR _IOR('@', 3, sizeof(__u32*))
-#define FBIO_RADEON_SET_MIRROR _IOW('@', 4, sizeof(__u32*))
+#define FBIO_RADEON_GET_MIRROR _IOR('@', 3, size_t)
+#define FBIO_RADEON_SET_MIRROR _IOW('@', 4, size_t)
 
 #endif