Fix ring buffer 32/64 bits compat
authorJulien Desfossez <jdesfossez@efficios.com>
Thu, 20 Sep 2012 16:00:05 +0000 (12:00 -0400)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Thu, 20 Sep 2012 16:01:26 +0000 (12:01 -0400)
The type of fields exchanged between kernel and userspace must be
compat_ulong_t instead of unsigned long in case of compat where
userspace is 32 bits and kernel is 64 bits.

Signed-off-by: Julien Desfossez <jdesfossez@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
lib/ringbuffer/ring_buffer_vfs.c
lib/ringbuffer/vfs.h

index 034c6fdd15d4c9a23680190c12811907c4685253..c69b64e1d9ffea5a17d980f29e64d785b8d23762 100644 (file)
@@ -280,14 +280,14 @@ long lib_ring_buffer_compat_ioctl(struct file *filp, unsigned int cmd,
                return -EIO;
 
        switch (cmd) {
-       case RING_BUFFER_SNAPSHOT:
+       case RING_BUFFER_COMPAT_SNAPSHOT:
                return lib_ring_buffer_snapshot(buf, &buf->cons_snapshot,
                                                &buf->prod_snapshot);
-       case RING_BUFFER_SNAPSHOT_GET_CONSUMED:
+       case RING_BUFFER_COMPAT_SNAPSHOT_GET_CONSUMED:
                return compat_put_ulong(buf->cons_snapshot, arg);
-       case RING_BUFFER_SNAPSHOT_GET_PRODUCED:
+       case RING_BUFFER_COMPAT_SNAPSHOT_GET_PRODUCED:
                return compat_put_ulong(buf->prod_snapshot, arg);
-       case RING_BUFFER_GET_SUBBUF:
+       case RING_BUFFER_COMPAT_GET_SUBBUF:
        {
                __u32 uconsume;
                unsigned long consume;
@@ -306,11 +306,11 @@ long lib_ring_buffer_compat_ioctl(struct file *filp, unsigned int cmd,
                }
                return ret;
        }
-       case RING_BUFFER_PUT_SUBBUF:
+       case RING_BUFFER_COMPAT_PUT_SUBBUF:
                lib_ring_buffer_put_subbuf(buf);
                return 0;
 
-       case RING_BUFFER_GET_NEXT_SUBBUF:
+       case RING_BUFFER_COMPAT_GET_NEXT_SUBBUF:
        {
                long ret;
 
@@ -321,10 +321,10 @@ long lib_ring_buffer_compat_ioctl(struct file *filp, unsigned int cmd,
                }
                return ret;
        }
-       case RING_BUFFER_PUT_NEXT_SUBBUF:
+       case RING_BUFFER_COMPAT_PUT_NEXT_SUBBUF:
                lib_ring_buffer_put_next_subbuf(buf);
                return 0;
-       case RING_BUFFER_GET_SUBBUF_SIZE:
+       case RING_BUFFER_COMPAT_GET_SUBBUF_SIZE:
        {
                unsigned long data_size;
 
@@ -333,7 +333,7 @@ long lib_ring_buffer_compat_ioctl(struct file *filp, unsigned int cmd,
                        return -EFBIG;
                return put_ulong(data_size, arg);
        }
-       case RING_BUFFER_GET_PADDED_SUBBUF_SIZE:
+       case RING_BUFFER_COMPAT_GET_PADDED_SUBBUF_SIZE:
        {
                unsigned long size;
 
@@ -343,11 +343,11 @@ long lib_ring_buffer_compat_ioctl(struct file *filp, unsigned int cmd,
                        return -EFBIG;
                return put_ulong(size, arg);
        }
-       case RING_BUFFER_GET_MAX_SUBBUF_SIZE:
+       case RING_BUFFER_COMPAT_GET_MAX_SUBBUF_SIZE:
                if (chan->backend.subbuf_size > UINT_MAX)
                        return -EFBIG;
                return put_ulong(chan->backend.subbuf_size, arg);
-       case RING_BUFFER_GET_MMAP_LEN:
+       case RING_BUFFER_COMPAT_GET_MMAP_LEN:
        {
                unsigned long mmap_buf_len;
 
@@ -360,7 +360,7 @@ long lib_ring_buffer_compat_ioctl(struct file *filp, unsigned int cmd,
                        return -EFBIG;
                return put_ulong(mmap_buf_len, arg);
        }
-       case RING_BUFFER_GET_MMAP_READ_OFFSET:
+       case RING_BUFFER_COMPAT_GET_MMAP_READ_OFFSET:
        {
                unsigned long sb_bindex, read_offset;
 
@@ -373,7 +373,7 @@ long lib_ring_buffer_compat_ioctl(struct file *filp, unsigned int cmd,
                        return -EINVAL;
                return put_ulong(read_offset, arg);
        }
-       case RING_BUFFER_FLUSH:
+       case RING_BUFFER_COMPAT_FLUSH:
                lib_ring_buffer_switch_slow(buf, SWITCH_ACTIVE);
                return 0;
        default:
index 4a3f92b068693fe0e2c4ebef503a4038ed126d41..ffeef449d01985c248d524d2c2a56b8b5e46c84c 100644 (file)
@@ -72,30 +72,46 @@ long lib_ring_buffer_compat_ioctl(struct file *filp, unsigned int cmd,
 
 /* Get a snapshot of the current ring buffer producer and consumer positions */
 #define RING_BUFFER_SNAPSHOT                   _IO(0xF6, 0x00)
+#define RING_BUFFER_COMPAT_SNAPSHOT            RING_BUFFER_SNAPSHOT
 /* Get the consumer position (iteration start) */
 #define RING_BUFFER_SNAPSHOT_GET_CONSUMED      _IOR(0xF6, 0x01, unsigned long)
+#define RING_BUFFER_COMPAT_SNAPSHOT_GET_CONSUMED \
+       _IOR(0xF6, 0x01, compat_ulong_t)
 /* Get the producer position (iteration end) */
 #define RING_BUFFER_SNAPSHOT_GET_PRODUCED      _IOR(0xF6, 0x02, unsigned long)
+#define RING_BUFFER_COMPAT_SNAPSHOT_GET_PRODUCED \
+       _IOR(0xF6, 0x02, compat_ulong_t)
 /* Get exclusive read access to the specified sub-buffer position */
 #define RING_BUFFER_GET_SUBBUF                 _IOW(0xF6, 0x03, unsigned long)
+#define RING_BUFFER_COMPAT_GET_SUBBUF          _IOW(0xF6, 0x03, compat_ulong_t)
 /* Release exclusive sub-buffer access */
 #define RING_BUFFER_PUT_SUBBUF                 _IO(0xF6, 0x04)
+#define RING_BUFFER_COMPAT_PUT_SUBBUF          RING_BUFFER_PUT_SUBBUF
 
 /* Get exclusive read access to the next sub-buffer that can be read. */
 #define RING_BUFFER_GET_NEXT_SUBBUF            _IO(0xF6, 0x05)
+#define RING_BUFFER_COMPAT_GET_NEXT_SUBBUF     RING_BUFFER_GET_NEXT_SUBBUF
 /* Release exclusive sub-buffer access, move consumer forward. */
 #define RING_BUFFER_PUT_NEXT_SUBBUF            _IO(0xF6, 0x06)
+#define RING_BUFFER_COMPAT_PUT_NEXT_SUBBUF     RING_BUFFER_PUT_NEXT_SUBBUF
 /* returns the size of the current sub-buffer, without padding (for mmap). */
 #define RING_BUFFER_GET_SUBBUF_SIZE            _IOR(0xF6, 0x07, unsigned long)
+#define RING_BUFFER_COMPAT_GET_SUBBUF_SIZE     _IOR(0xF6, 0x07, compat_ulong_t)
 /* returns the size of the current sub-buffer, with padding (for splice). */
 #define RING_BUFFER_GET_PADDED_SUBBUF_SIZE     _IOR(0xF6, 0x08, unsigned long)
+#define RING_BUFFER_COMPAT_GET_PADDED_SUBBUF_SIZE \
+       _IOR(0xF6, 0x08, compat_ulong_t)
 /* returns the maximum size for sub-buffers. */
 #define RING_BUFFER_GET_MAX_SUBBUF_SIZE                _IOR(0xF6, 0x09, unsigned long)
+#define RING_BUFFER_COMPAT_GET_MAX_SUBBUF_SIZE _IOR(0xF6, 0x09, compat_ulong_t)
 /* returns the length to mmap. */
 #define RING_BUFFER_GET_MMAP_LEN               _IOR(0xF6, 0x0A, unsigned long)
+#define RING_BUFFER_COMPAT_GET_MMAP_LEN                _IOR(0xF6, 0x0A, compat_ulong_t)
 /* returns the offset of the subbuffer belonging to the mmap reader. */
 #define RING_BUFFER_GET_MMAP_READ_OFFSET       _IOR(0xF6, 0x0B, unsigned long)
+#define RING_BUFFER_COMPAT_GET_MMAP_READ_OFFSET        _IOR(0xF6, 0x0B, compat_ulong_t)
 /* flush the current sub-buffer */
 #define RING_BUFFER_FLUSH                      _IO(0xF6, 0x0C)
+#define RING_BUFFER_COMPAT_FLUSH               RING_BUFFER_FLUSH
 
 #endif /* _LIB_RING_BUFFER_VFS_H */
This page took 0.028155 seconds and 4 git commands to generate.