From 7a46badcf4eaa337070a6e7dda61698fd5a32cb3 Mon Sep 17 00:00:00 2001 From: Jan Beulich Date: Fri, 9 Jun 2017 13:58:11 +0200 Subject: [PATCH] x86: fix build with gcc 7 -Wint-in-bool-context, enabled by default in gcc 7, doesn't like multiplication in conditional operators. "Hide" them, at the risk of the next compiler version becoming smarter and recognizing even those. (The hope is that added smartness then would also better deal with legitimate cases like the ones here.) The change could have been done in access_ok(), but I think we better keep it at the places the compiler is actually unhappy about. Signed-off-by: Jan Beulich Reviewed-by: Andrew Cooper master commit: f32400e90c046a9fd76c8917a60d34ade9c02ea2 master date: 2017-05-19 10:11:36 +0200 --- xen/arch/x86/traps.c | 4 ++-- xen/include/asm-x86/x86_64/uaccess.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/xen/arch/x86/traps.c b/xen/arch/x86/traps.c index 85b1481eb0..075e081b7c 100644 --- a/xen/arch/x86/traps.c +++ b/xen/arch/x86/traps.c @@ -3169,7 +3169,7 @@ static void emulate_gate_op(struct cpu_user_regs *regs) return; } stkp = (unsigned int *)(unsigned long)((unsigned int)base + esp); - if ( !compat_access_ok(stkp - 4 - nparm, (4 + nparm) * 4) ) + if ( !compat_access_ok(stkp - 4 - nparm, 16 + nparm * 4) ) { do_guest_trap(TRAP_gp_fault, regs, 1); return; @@ -3188,7 +3188,7 @@ static void emulate_gate_op(struct cpu_user_regs *regs) !check_stack_limit(ar, limit, esp + nparm * 4, nparm * 4) ) return do_guest_trap(TRAP_gp_fault, regs, 1); ustkp = (unsigned int *)(unsigned long)((unsigned int)base + regs->_esp + nparm * 4); - if ( !compat_access_ok(ustkp - nparm, nparm * 4) ) + if ( !compat_access_ok(ustkp - nparm, 0 + nparm * 4) ) { do_guest_trap(TRAP_gp_fault, regs, 1); return; diff --git a/xen/include/asm-x86/x86_64/uaccess.h b/xen/include/asm-x86/x86_64/uaccess.h index 4275e66f40..d7dad4f8bc 100644 --- a/xen/include/asm-x86/x86_64/uaccess.h +++ b/xen/include/asm-x86/x86_64/uaccess.h @@ -55,7 +55,7 @@ extern void *xlat_malloc(unsigned long *xlat_page_current, size_t size); #define compat_array_access_ok(addr,count,size) \ (likely((count) < (~0U / (size))) && \ - compat_access_ok(addr, (count) * (size))) + compat_access_ok(addr, 0 + (count) * (size))) #define __put_user_size(x,ptr,size,retval,errret) \ do { \