aboutsummaryrefslogtreecommitdiff
path: root/net/core/utils.c
diff options
context:
space:
mode:
authorColin Ian King <[email protected]>2018-12-22 19:11:16 +0000
committerThomas Gleixner <[email protected]>2019-01-29 21:58:59 +0100
commit5ccd35287edae4107475a141a477a6a4ecbe1cab (patch)
tree776579981120896fc4c1800e204e056bb7f68732 /net/core/utils.c
parentb677dfae5aa197afc5191755a76a8727ffca538a (diff)
x86/fault: Fix sign-extend unintended sign extension
show_ldttss() shifts desc.base2 by 24 bit, but base2 is 8 bits of a bitfield in a u16. Due to the really great idea of integer promotion in C99 base2 is promoted to an int, because that's the standard defined behaviour when all values which can be represented by base2 fit into an int. Now if bit 7 is set in desc.base2 the result of the shift left by 24 makes the resulting integer negative and the following conversion to unsigned long legitmately sign extends first causing the upper bits 32 bits to be set in the result. Fix this by casting desc.base2 to unsigned long before the shift. Detected by CoverityScan, CID#1475635 ("Unintended sign extension") [ tglx: Reworded the changelog a bit as I actually had to lookup the standard (again) to decode the original one. ] Fixes: a1a371c468f7 ("x86/fault: Decode page fault OOPSes better") Signed-off-by: Colin Ian King <[email protected]> Signed-off-by: Thomas Gleixner <[email protected]> Cc: Dave Hansen <[email protected]> Cc: Andy Lutomirski <[email protected]> Cc: Peter Zijlstra <[email protected]> Cc: Borislav Petkov <[email protected]> Cc: "H . Peter Anvin" <[email protected]> Cc: [email protected] Link: https://lkml.kernel.org/r/[email protected]
Diffstat (limited to 'net/core/utils.c')
0 files changed, 0 insertions, 0 deletions