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.