jfs: avoid undefined behavior from left-shifting by 32 bits
authorNickolai Zeldovich <nickolai@csail.mit.edu>
Sat, 5 Jan 2013 19:19:21 +0000 (14:19 -0500)
committerDave Kleikamp <dave.kleikamp@oracle.com>
Mon, 7 Jan 2013 14:21:36 +0000 (08:21 -0600)
commit9d48017bce890b19e3bba649850bdbc8a6f95903
treeece6878230600e39daafc2169afaced628cac871
parent5f243b9b46a22e5790dbbc36f574c2417af49a41
jfs: avoid undefined behavior from left-shifting by 32 bits

Shifting a 32-bit int by 32 bits is undefined behavior in C, and
results in different behavior on different architectures (e.g., x86
and PowerPC).  diAlloc() in fs/jfs/jfs_imap.c computes a mask using
0xffffffffu<<(32-bitno), which can left-shift by 32 bits.  To avoid
unexpected behavior, explicitly check for bitno==0 and use a 0 mask.

Signed-off-by: Nickolai Zeldovich <nickolai@csail.mit.edu>
Signed-off-by: Dave Kleikamp <dave.kleikamp@oracle.com>
fs/jfs/jfs_imap.c