isdn: fix a wrapping bug in isdn_ppp_ioctl()
authorDan Carpenter <dan.carpenter@oracle.com>
Tue, 9 Oct 2012 23:42:18 +0000 (23:42 +0000)
committerDavid S. Miller <davem@davemloft.net>
Thu, 11 Oct 2012 02:50:45 +0000 (22:50 -0400)
"protos" is an array of unsigned longs and "i" is the number of bits in
an unsigned long so we need to use 1UL as well to prevent the shift
from wrapping around.

Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/isdn/i4l/isdn_ppp.c

index a1e76015082177c25a7befa7c401d8ea1713446e..61d78fa03b1aa0438553f57f4b4c01686b141609 100644 (file)
@@ -595,7 +595,7 @@ isdn_ppp_ioctl(int min, struct file *file, unsigned int cmd, unsigned long arg)
                        j = ipc->num / (sizeof(long) * 8);
                        i = ipc->num % (sizeof(long) * 8);
                        if (j < 8)
-                               protos[j] |= (0x1 << i);
+                               protos[j] |= (1UL << i);
                        ipc = ipc->next;
                }
                if ((r = set_arg(argp, protos, 8 * sizeof(long))))