From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933314AbdKAVDD (ORCPT ); Wed, 1 Nov 2017 17:03:03 -0400 Received: from terminus.zytor.com ([65.50.211.136]:34015 "EHLO terminus.zytor.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933270AbdKAVDA (ORCPT ); Wed, 1 Nov 2017 17:03:00 -0400 Date: Wed, 1 Nov 2017 13:57:04 -0700 From: tip-bot for Ricardo Neri Message-ID: Cc: peterz@infradead.org, corbet@lwn.net, slaoub@gmail.com, colin.king@canonical.com, cmetcalf@mellanox.com, joe@perches.com, hpa@zytor.com, dave.hansen@linux.intel.com, vbabka@suse.cz, luto@kernel.org, bp@suse.de, mhiramat@kernel.org, mingo@kernel.org, pbonzini@redhat.com, akpm@linux-foundation.org, lstoakes@gmail.com, adam.buchbinder@gmail.com, ravi.v.shankar@intel.com, liverlint@gmail.com, tglx@linutronix.de, ray.huang@amd.com, adanhawthorn@gmail.com, brgerst@gmail.com, shuah@kernel.org, paul.gortmaker@windriver.com, qiaowei.ren@intel.com, mst@redhat.com, jslaby@suse.cz, linux-kernel@vger.kernel.org, ricardo.neri-calderon@linux.intel.com Reply-To: peterz@infradead.org, slaoub@gmail.com, cmetcalf@mellanox.com, corbet@lwn.net, colin.king@canonical.com, joe@perches.com, hpa@zytor.com, dave.hansen@linux.intel.com, vbabka@suse.cz, luto@kernel.org, bp@suse.de, mhiramat@kernel.org, mingo@kernel.org, akpm@linux-foundation.org, pbonzini@redhat.com, lstoakes@gmail.com, adam.buchbinder@gmail.com, liverlint@gmail.com, ravi.v.shankar@intel.com, tglx@linutronix.de, adanhawthorn@gmail.com, ray.huang@amd.com, brgerst@gmail.com, paul.gortmaker@windriver.com, shuah@kernel.org, qiaowei.ren@intel.com, mst@redhat.com, jslaby@suse.cz, linux-kernel@vger.kernel.org, ricardo.neri-calderon@linux.intel.com In-Reply-To: <1509135945-13762-7-git-send-email-ricardo.neri-calderon@linux.intel.com> References: <1509135945-13762-7-git-send-email-ricardo.neri-calderon@linux.intel.com> To: linux-tip-commits@vger.kernel.org Subject: [tip:x86/mpx] x86/mpx: Use signed variables to compute effective addresses Git-Commit-ID: b8d2eff3b1c6e46238a5fb3f56843e9974b4889f 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: b8d2eff3b1c6e46238a5fb3f56843e9974b4889f Gitweb: https://git.kernel.org/tip/b8d2eff3b1c6e46238a5fb3f56843e9974b4889f Author: Ricardo Neri AuthorDate: Fri, 27 Oct 2017 13:25:33 -0700 Committer: Thomas Gleixner CommitDate: Wed, 1 Nov 2017 21:50:09 +0100 x86/mpx: Use signed variables to compute effective addresses Even though memory addresses are unsigned, the operands used to compute the effective address do have a sign. This is true for ModRM.rm, SIB.base, SIB.index as well as the displacement bytes. Thus, signed variables shall be used when computing the effective address from these operands. Once the signed effective address has been computed, it is casted to an unsigned long to determine the linear address. Variables are renamed to better reflect the type of address being computed. Signed-off-by: Ricardo Neri Signed-off-by: Thomas Gleixner Reviewed-by: Borislav Petkov Cc: Adan Hawthorn Cc: "Michael S. Tsirkin" Cc: Peter Zijlstra Cc: Dave Hansen Cc: ricardo.neri@intel.com Cc: Paul Gortmaker Cc: Huang Rui Cc: Qiaowei Ren Cc: Shuah Khan Cc: Jonathan Corbet Cc: Jiri Slaby Cc: Nathan Howard Cc: "Ravi V. Shankar" Cc: Chris Metcalf Cc: Brian Gerst Cc: Andy Lutomirski Cc: Colin Ian King Cc: Chen Yucong Cc: Adam Buchbinder Cc: Vlastimil Babka Cc: Lorenzo Stoakes Cc: Masami Hiramatsu Cc: Joe Perches Cc: Paolo Bonzini Cc: Andrew Morton Link: https://lkml.kernel.org/r/1509135945-13762-7-git-send-email-ricardo.neri-calderon@linux.intel.com --- arch/x86/mm/mpx.c | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/arch/x86/mm/mpx.c b/arch/x86/mm/mpx.c index f4c48a0..57e5bf5 100644 --- a/arch/x86/mm/mpx.c +++ b/arch/x86/mm/mpx.c @@ -138,8 +138,9 @@ static int get_reg_offset(struct insn *insn, struct pt_regs *regs, */ static void __user *mpx_get_addr_ref(struct insn *insn, struct pt_regs *regs) { - unsigned long addr = -1L, base, indx; int addr_offset, base_offset, indx_offset; + unsigned long linear_addr = -1L; + long eff_addr, base, indx; insn_byte_t sib; insn_get_modrm(insn); @@ -150,7 +151,8 @@ static void __user *mpx_get_addr_ref(struct insn *insn, struct pt_regs *regs) addr_offset = get_reg_offset(insn, regs, REG_TYPE_RM); if (addr_offset < 0) goto out; - addr = regs_get_register(regs, addr_offset); + + eff_addr = regs_get_register(regs, addr_offset); } else { if (insn->sib.nbytes) { base_offset = get_reg_offset(insn, regs, REG_TYPE_BASE); @@ -163,17 +165,23 @@ static void __user *mpx_get_addr_ref(struct insn *insn, struct pt_regs *regs) base = regs_get_register(regs, base_offset); indx = regs_get_register(regs, indx_offset); - addr = base + indx * (1 << X86_SIB_SCALE(sib)); + + eff_addr = base + indx * (1 << X86_SIB_SCALE(sib)); } else { addr_offset = get_reg_offset(insn, regs, REG_TYPE_RM); if (addr_offset < 0) goto out; - addr = regs_get_register(regs, addr_offset); + + eff_addr = regs_get_register(regs, addr_offset); } - addr += insn->displacement.value; + + eff_addr += insn->displacement.value; } + + linear_addr = (unsigned long)eff_addr; + out: - return (void __user *)addr; + return (void __user *)linear_addr; } static int mpx_insn_decode(struct insn *insn,