staging:iio: IIO_EVENT_CODE: Clamp channel numbers
authorLars-Peter Clausen <lars@metafoo.de>
Wed, 2 Nov 2011 08:40:01 +0000 (09:40 +0100)
committerGreg Kroah-Hartman <gregkh@suse.de>
Sun, 27 Nov 2011 00:39:58 +0000 (16:39 -0800)
Make sure we only use the allotted space for channel numbers in the event mask
and do not let them override other fields.

Since negative values are valid channel number, cast the channel number to
signed when extracting it from an event mask.

Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Acked-by: Jonathan Cameron <jic23@cam.ac.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/staging/iio/events.h

index 92759547b410b93ce29c2add730f3d318394df35..bfb63400fa6066c59a11cf8e42eb1a8624a466c2 100644 (file)
@@ -56,7 +56,8 @@ enum iio_event_direction {
                       type, chan, chan1, chan2)                        \
        (((u64)type << 56) | ((u64)diff << 55) |                        \
         ((u64)direction << 48) | ((u64)modifier << 40) |               \
-        ((u64)chan_type << 32) | (chan2 << 16) | chan1 | chan)
+        ((u64)chan_type << 32) | (((u16)chan2) << 16) | ((u16)chan1) | \
+        ((u16)chan))
 
 
 #define IIO_EV_DIR_MAX 4
@@ -95,7 +96,7 @@ enum iio_event_direction {
 
 /* Event code number extraction depends on which type of event we have.
  * Perhaps review this function in the future*/
-#define IIO_EVENT_CODE_EXTRACT_NUM(mask) (mask & 0xFFFF)
+#define IIO_EVENT_CODE_EXTRACT_NUM(mask) ((__s16)(mask & 0xFFFF))
 
 #define IIO_EVENT_CODE_EXTRACT_MODIFIER(mask) ((mask >> 40) & 0xFF)