summaryrefslogtreecommitdiff
path: root/arch/x86/kernel/umip.c
diff options
context:
space:
mode:
authorBorislav Petkov <bp@suse.de>2017-11-23 10:19:51 +0100
committerThomas Gleixner <tglx@linutronix.de>2017-11-23 20:17:59 +0100
commite2a5dca753d1cdc3212519023ed8a13e13f5495b (patch)
tree04bd970b855884f0f104041c4662713841b750d3 /arch/x86/kernel/umip.c
parent69550d41ff9c884c6d996fca41037974b2255852 (diff)
downloadlwn-e2a5dca753d1cdc3212519023ed8a13e13f5495b.tar.gz
lwn-e2a5dca753d1cdc3212519023ed8a13e13f5495b.zip
x86/umip: Fix insn_get_code_seg_params()'s return value
In order to save on redundant structs definitions insn_get_code_seg_params() was made to return two 4-bit values in a char but clang complains: arch/x86/lib/insn-eval.c:780:10: warning: implicit conversion from 'int' to 'char' changes value from 132 to -124 [-Wconstant-conversion] return INSN_CODE_SEG_PARAMS(4, 8); ~~~~~~ ^~~~~~~~~~~~~~~~~~~~~~~~~~ ./arch/x86/include/asm/insn-eval.h:16:57: note: expanded from macro 'INSN_CODE_SEG_PARAMS' #define INSN_CODE_SEG_PARAMS(oper_sz, addr_sz) (oper_sz | (addr_sz << 4)) Those two values do get picked apart afterwards the opposite way of how they were ORed so wrt to the LSByte, the return value is the same. But this function returns -EINVAL in the error case, which is an int. So make it return an int which is the native word size anyway and thus fix the clang warning. Reported-by: Kees Cook <keescook@google.com> Reported-by: Nick Desaulniers <nick.desaulniers@gmail.com> Signed-off-by: Borislav Petkov <bp@suse.de> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Cc: ricardo.neri-calderon@linux.intel.com Link: https://lkml.kernel.org/r/20171123091951.1462-1-bp@alien8.de
Diffstat (limited to 'arch/x86/kernel/umip.c')
-rw-r--r--arch/x86/kernel/umip.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/arch/x86/kernel/umip.c b/arch/x86/kernel/umip.c
index dabbac30acdf..f44ce0fb3583 100644
--- a/arch/x86/kernel/umip.c
+++ b/arch/x86/kernel/umip.c
@@ -319,7 +319,7 @@ bool fixup_umip_exception(struct pt_regs *regs)
unsigned char buf[MAX_INSN_SIZE];
void __user *uaddr;
struct insn insn;
- char seg_defs;
+ int seg_defs;
if (!regs)
return false;