[WIP] BZ #14361: POSIX vs. BSD and the `ioctl' interface.
Chris Metcalf
cmetcalf@tilera.com
Wed Jul 25 23:49:00 GMT 2012
On 7/25/2012 5:39 PM, Roland McGrath wrote:
> The tilegx and mipsn64 code to explicitly sign-extend seems
> misguided to me. As Linus said in bugzilla, Linux always treats it
> as a 32-bit quantity so it really should not care at all whether it
> was sign-extended to 64 bits or not.
The problem is that for kernels not configured with HAVE_SYSCALL_WRAPPERS,
calling ioctl() with a value that has bit 31 set will result in a value
that does not compare equal within the kernel: the passed-in value will
have zero high bits (since the ioctl argument was prototyped as a long) but
the kernel constant that the comparison is done against will be
sign-extended (since it's prototyped as an int). So the comparison fails.
This is true for both tilegx and mipsn64 as far as I know.
--
Chris Metcalf, Tilera Corp.
http://www.tilera.com
More information about the Libc-alpha
mailing list