On Thu, 2018-10-04 at 23:57 -0700, Nathan Chancellor wrote: > Regardless of how the overflow is handled within the switch statement, > the overflow is also happening when passing in these values to the ioctl, > right? I mean these case values are defined in the uapi files so that > userspace can easily pass them in to the ioctl, meaning those values are > being passed in as a signed integer and I would assume subsequently > overflowing unless I'm just missing something here.
>From the user space header <sys/ioctl.h>: extern int ioctl (int __fd, unsigned long int __request, ...) __THROW; >From the kernel header <linux/fs.h>: long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long); long (*compat_ioctl) (struct file *, unsigned int, unsigned long); Why has the second argument been declared as "unsigned long" in the glibc headers and as "unsigned int" in the kernel headers? That's not clear to me. Bart.