From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753309AbdKWT2g (ORCPT ); Thu, 23 Nov 2017 14:28:36 -0500 Received: from terminus.zytor.com ([65.50.211.136]:36903 "EHLO terminus.zytor.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752948AbdKWT2f (ORCPT ); Thu, 23 Nov 2017 14:28:35 -0500 Date: Thu, 23 Nov 2017 11:25:14 -0800 From: tip-bot for Borislav Petkov Message-ID: Cc: bp@suse.de, keescook@google.com, mingo@kernel.org, hpa@zytor.com, tglx@linutronix.de, nick.desaulniers@gmail.com, linux-kernel@vger.kernel.org Reply-To: mingo@kernel.org, bp@suse.de, keescook@google.com, linux-kernel@vger.kernel.org, nick.desaulniers@gmail.com, tglx@linutronix.de, hpa@zytor.com In-Reply-To: <20171123091951.1462-1-bp@alien8.de> References: <20171123091951.1462-1-bp@alien8.de> To: linux-tip-commits@vger.kernel.org Subject: [tip:x86/urgent] x86/umip: Fix insn_get_code_seg_params()'s return value Git-Commit-ID: e2a5dca753d1cdc3212519023ed8a13e13f5495b X-Mailer: tip-git-log-daemon Robot-ID: Robot-Unsubscribe: Contact to get blacklisted from these emails MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8 Content-Disposition: inline Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Commit-ID: e2a5dca753d1cdc3212519023ed8a13e13f5495b Gitweb: https://git.kernel.org/tip/e2a5dca753d1cdc3212519023ed8a13e13f5495b Author: Borislav Petkov AuthorDate: Thu, 23 Nov 2017 10:19:51 +0100 Committer: Thomas Gleixner CommitDate: Thu, 23 Nov 2017 20:17:59 +0100 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 Reported-by: Nick Desaulniers Signed-off-by: Borislav Petkov Signed-off-by: Thomas Gleixner Cc: ricardo.neri-calderon@linux.intel.com Link: https://lkml.kernel.org/r/20171123091951.1462-1-bp@alien8.de --- arch/x86/include/asm/insn-eval.h | 2 +- arch/x86/kernel/umip.c | 2 +- arch/x86/lib/insn-eval.c | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/arch/x86/include/asm/insn-eval.h b/arch/x86/include/asm/insn-eval.h index e1d3b4c..2b6ccf2 100644 --- a/arch/x86/include/asm/insn-eval.h +++ b/arch/x86/include/asm/insn-eval.h @@ -18,6 +18,6 @@ void __user *insn_get_addr_ref(struct insn *insn, struct pt_regs *regs); int insn_get_modrm_rm_off(struct insn *insn, struct pt_regs *regs); unsigned long insn_get_seg_base(struct pt_regs *regs, int seg_reg_idx); -char insn_get_code_seg_params(struct pt_regs *regs); +int insn_get_code_seg_params(struct pt_regs *regs); #endif /* _ASM_X86_INSN_EVAL_H */ diff --git a/arch/x86/kernel/umip.c b/arch/x86/kernel/umip.c index dabbac3..f44ce0f 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; diff --git a/arch/x86/lib/insn-eval.c b/arch/x86/lib/insn-eval.c index 35625d2..9119d8e 100644 --- a/arch/x86/lib/insn-eval.c +++ b/arch/x86/lib/insn-eval.c @@ -733,11 +733,11 @@ static unsigned long get_seg_limit(struct pt_regs *regs, int seg_reg_idx) * * Returns: * - * A signed 8-bit value containing the default parameters on success. + * An int containing ORed-in default parameters on success. * * -EINVAL on error. */ -char insn_get_code_seg_params(struct pt_regs *regs) +int insn_get_code_seg_params(struct pt_regs *regs) { struct desc_struct *desc; short sel;