From mboxrd@z Thu Jan 1 00:00:00 1970 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752137AbeAJRkn (ORCPT + 1 other); Wed, 10 Jan 2018 12:40:43 -0500 Received: from terminus.zytor.com ([65.50.211.136]:43251 "EHLO terminus.zytor.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751404AbeAJRkk (ORCPT ); Wed, 10 Jan 2018 12:40:40 -0500 Date: Wed, 10 Jan 2018 09:33:55 -0800 From: tip-bot for Borislav Petkov Message-ID: Cc: peterz@infradead.org, ak@linux.intel.com, jikos@kernel.org, hpa@zytor.com, thomas.lendacky@amd.com, bp@suse.de, pjt@google.com, mingo@kernel.org, linux-kernel@vger.kernel.org, andi@firstfloor.org, dave.hansen@intel.com, tglx@linutronix.de, luto@kernel.org, dwmw2@infradead.org, tim.c.chen@linux.intel.com, gregkh@linux-foundation.org, torvalds@linux-foundation.org Reply-To: pjt@google.com, peterz@infradead.org, hpa@zytor.com, thomas.lendacky@amd.com, bp@suse.de, ak@linux.intel.com, jikos@kernel.org, andi@firstfloor.org, mingo@kernel.org, linux-kernel@vger.kernel.org, dwmw2@infradead.org, luto@kernel.org, dave.hansen@intel.com, tglx@linutronix.de, gregkh@linux-foundation.org, torvalds@linux-foundation.org, tim.c.chen@linux.intel.com In-Reply-To: <20180110112815.mgciyf5acwacphkq@pd.tnic> References: <20180110112815.mgciyf5acwacphkq@pd.tnic> To: linux-tip-commits@vger.kernel.org Subject: [tip:x86/pti] x86/alternatives: Fix optimize_nops() checking Git-Commit-ID: d1cb4348f683d132ef2d468d4e9ad421486163f9 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 Return-Path: Commit-ID: d1cb4348f683d132ef2d468d4e9ad421486163f9 Gitweb: https://git.kernel.org/tip/d1cb4348f683d132ef2d468d4e9ad421486163f9 Author: Borislav Petkov AuthorDate: Wed, 10 Jan 2018 12:28:16 +0100 Committer: Thomas Gleixner CommitDate: Wed, 10 Jan 2018 18:28:21 +0100 x86/alternatives: Fix optimize_nops() checking The alternatives code checks only the first byte whether it is a NOP, but with NOPs in front of the payload and having actual instructions after it breaks the "optimized' test. Make sure to scan all bytes before deciding to optimize the NOPs in there. Reported-by: David Woodhouse Signed-off-by: Borislav Petkov Signed-off-by: Thomas Gleixner Cc: Tom Lendacky Cc: Andi Kleen Cc: Tim Chen Cc: Peter Zijlstra Cc: Jiri Kosina Cc: Dave Hansen Cc: Andi Kleen Cc: Andrew Lutomirski Cc: Linus Torvalds Cc: Greg Kroah-Hartman Cc: Paul Turner Link: https://lkml.kernel.org/r/20180110112815.mgciyf5acwacphkq@pd.tnic --- arch/x86/kernel/alternative.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/arch/x86/kernel/alternative.c b/arch/x86/kernel/alternative.c index 3344d33..e0b97e4 100644 --- a/arch/x86/kernel/alternative.c +++ b/arch/x86/kernel/alternative.c @@ -344,9 +344,12 @@ done: static void __init_or_module noinline optimize_nops(struct alt_instr *a, u8 *instr) { unsigned long flags; + int i; - if (instr[0] != 0x90) - return; + for (i = 0; i < a->padlen; i++) { + if (instr[i] != 0x90) + return; + } local_irq_save(flags); add_nops(instr + (a->instrlen - a->padlen), a->padlen);