[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