Re: [PATCH 1/4] UAPI: Fix endianness conditionals in linux/aio_abi.h

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Mar 06, 2013 at 08:47:33PM +0000, David Howells wrote:
> In the UAPI header files, __BIG_ENDIAN and __LITTLE_ENDIAN must be compared
> against __BYTE_ORDER in preprocessor conditionals where these are exposed to
> userspace (that is they're not inside __KERNEL__ conditionals).
> 
> However, in the main kernel the norm is to check for "defined(__XXX_ENDIAN)"
> rather than comparing against __BYTE_ORDER and this has incorrectly leaked
> into the userspace headers.
> 
> The definition of PADDED() in linux/aio_abi.h is wrong in this way.  Note that
> userspace will likely interpret this and thus the order of fields in struct
> iocb incorrectly as the little-endian variant on big-endian machines -
> depending on header inclusion order.
> 
> [!!!] NOTE [!!!]  This patch may adversely change the userspace API.  It might
> be better to fix the ordering of aio_key and aio_reserved1 in struct iocb.

It is unlikely that anyone has used the existing kernel headers and hit this 
issue given that most existing users use the libaio.h include (which does not 
get the endianness tests wrong).  Given that the kernel has always used the 
correct endian mappings, this change is correct.

Acked-by: Benjamin LaHaise <bcrl@xxxxxxxxx>

		-ben

> Signed-off-by: David Howells <dhowells@xxxxxxxxxx>
> cc: Benjamin LaHaise <bcrl@xxxxxxxxx>
> cc: linux-aio@xxxxxxxxx
> ---
> 
>  include/uapi/linux/aio_abi.h |    4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/include/uapi/linux/aio_abi.h b/include/uapi/linux/aio_abi.h
> index 86fa7a7..bb2554f 100644
> --- a/include/uapi/linux/aio_abi.h
> +++ b/include/uapi/linux/aio_abi.h
> @@ -62,9 +62,9 @@ struct io_event {
>  	__s64		res2;		/* secondary result */
>  };
>  
> -#if defined(__LITTLE_ENDIAN)
> +#if defined(__BYTE_ORDER) ? __BYTE_ORDER == __LITTLE_ENDIAN : defined(__LITTLE_ENDIAN)
>  #define PADDED(x,y)	x, y
> -#elif defined(__BIG_ENDIAN)
> +#elif defined(__BYTE_ORDER) ? __BYTE_ORDER == __BIG_ENDIAN : defined(__BIG_ENDIAN)
>  #define PADDED(x,y)	y, x
>  #else
>  #error edit for your odd byteorder.
> 
> --
> To unsubscribe, send a message with 'unsubscribe linux-aio' in
> the body to majordomo@xxxxxxxxx.  For more info on Linux AIO,
> see: http://www.kvack.org/aio/
> Don't email: <a href=mailto:"aart@xxxxxxxxx";>aart@xxxxxxxxx</a>

-- 
"Thought is the essence of where you are now."
--
To unsubscribe from this list: send the line "unsubscribe linux-arch" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Kernel]     [Kernel Newbies]     [x86 Platform Driver]     [Netdev]     [Linux Wireless]     [Netfilter]     [Bugtraq]     [Linux Filesystems]     [Yosemite Discussion]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Device Mapper]

  Powered by Linux