Lennert Buytenhek 94a3f78566 [ARM] 4837/1: make __get_unaligned_*() return unsigned types
Eric Sandeen tracked an XFS on ARM corruption bug down to a function
under fs/xfs/ involving some get_unaligned() calls on u64 pointers.
As it turns out, calling ARM's get_unaligned() on a u64 pointer
pointing to the following byte sequence:

	80 81 82 83 84 85 86 87

would return ffffffff83828180 (LE mode.)  This turns out to be
because of implicit u8 -> int promotion in ARM's implementation of
various helpers for get_unaligned(), causing them to accidentally
return signed instead of unsigned values, which in turn caused the
subsequent casts to unsigned long long in __get_unaligned_8_[bl]e()
to sign-extend the lower words.

Fix by casting the return values of __get_unaligned_[24]_[bl]e()
to unsigned int.

Cc: Eric Sandeen <sandeen@sandeen.net>
Cc: Rabeeh Khoury <rabeeh@marvell.com>
Cc: Nicolas Pitre <nico@marvell.com>
Signed-off-by: Lennert Buytenhek <buytenh@marvell.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
2008-02-29 22:46:48 +00:00
..
2008-02-03 14:59:11 +02:00
2005-09-07 16:57:21 -07:00
2008-01-28 23:58:27 -05:00
2006-01-08 20:13:39 -08:00
2006-12-13 14:34:43 +00:00
2005-04-16 15:20:36 -07:00
2005-04-16 15:20:36 -07:00
2007-04-25 22:23:33 -07:00
2007-10-23 12:37:59 +02:00
2005-04-16 15:20:36 -07:00
2007-07-17 10:23:11 -07:00
2005-04-16 15:20:36 -07:00
2007-10-17 08:42:55 -07:00
2006-01-08 20:13:39 -08:00
2007-02-12 09:48:34 -08:00
2005-04-16 15:20:36 -07:00
2006-10-08 12:32:36 -07:00
2007-10-20 00:32:32 +02:00
2007-10-14 12:41:52 -07:00
2006-01-10 08:01:34 -08:00
2005-04-16 15:20:36 -07:00
2006-09-20 14:58:35 +01:00
2005-04-16 15:20:36 -07:00
2005-04-16 15:20:36 -07:00
2005-04-16 15:20:36 -07:00
2005-10-18 07:51:34 +01:00
2005-04-16 15:20:36 -07:00
2006-11-30 22:52:28 +00:00
2006-02-15 15:32:22 -08:00
2005-04-16 15:20:36 -07:00
2005-04-16 15:20:36 -07:00
2005-04-16 15:20:36 -07:00
2005-07-07 16:50:16 +02:00
2005-04-16 15:20:36 -07:00
2005-04-16 15:20:36 -07:00
2006-03-21 22:05:45 +00:00
2005-04-16 15:20:36 -07:00
2005-04-16 15:20:36 -07:00
2007-05-11 08:29:34 -07:00
2005-04-16 15:20:36 -07:00
2006-03-27 08:44:50 -08:00
2005-04-16 15:20:36 -07:00
2005-04-16 15:20:36 -07:00
2005-04-16 15:20:36 -07:00
2007-10-17 08:42:47 -07:00
2005-04-16 15:20:36 -07:00
2005-04-16 15:20:36 -07:00
2007-05-30 13:15:06 +01:00
2005-04-16 15:20:36 -07:00
2005-04-16 15:20:36 -07:00
2005-04-16 15:20:36 -07:00
2005-04-16 15:20:36 -07:00
2005-04-16 15:20:36 -07:00
2008-02-07 08:42:31 -08:00
2005-04-16 15:20:36 -07:00
2005-04-16 15:20:36 -07:00
2008-02-05 09:44:18 -08:00
2007-10-19 11:53:34 -07:00
2005-04-16 15:20:36 -07:00
2007-10-12 23:43:31 +01:00
2008-02-07 08:42:30 -08:00
2008-01-26 14:41:28 +00:00
2005-04-16 15:20:36 -07:00