From nobody Sat Apr 18 01:28:22 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id C8941C433EF for ; Thu, 21 Jul 2022 08:52:11 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232575AbiGUIwK (ORCPT ); Thu, 21 Jul 2022 04:52:10 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54138 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232240AbiGUIwF (ORCPT ); Thu, 21 Jul 2022 04:52:05 -0400 Received: from galois.linutronix.de (Galois.linutronix.de [193.142.43.55]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5C60B76957; Thu, 21 Jul 2022 01:52:04 -0700 (PDT) Date: Thu, 21 Jul 2022 08:52:01 -0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020; t=1658393523; h=from:from:sender:sender:reply-to:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=ZXRU1gVtysEQ2gkM9STQISSTjrfK2pjQeaWAEktOzKM=; b=DwItpOWL0lGB6qQkk1nERbigaa9mWE+yzRwqE31Aw3b3vvZ5gkq02f8PT1m/fr43iaUZ5z iGDbVPGS1U1ug9HWgxj+gBQ341FOJMEuBN7mlMz4UPuhYV9pceqMeIPGdWNBEV2NVeXF8G 8r9R2uO9O9TSWhtuKBH9RCVYVRx6wodoE56OEYiO669etjOjFfk3A+lkpP8VIGwEThuAZp sirvlOnPlsQ4Y5B0IX0/lQAuFRF4s0auuHFIUT4ywAKTKghy0a87mD4UTetyA+M7Fio1wp hwPtYPEh0WP+IDL352eQ79av4f3rIMykgam2INKT+CHCgfPk/CwepIKqokFZ7g== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020e; t=1658393523; h=from:from:sender:sender:reply-to:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=ZXRU1gVtysEQ2gkM9STQISSTjrfK2pjQeaWAEktOzKM=; b=J6CV1wik6Q3pQtoSGAHUnPPUk6NPAGVftYFq+XTfH66YU6OyrnoQnla2q3mcFbP/wPAzYE d4hO9uDSqs9OG4DA== From: "tip-bot2 for Peter Zijlstra" Sender: tip-bot2@linutronix.de Reply-to: linux-kernel@vger.kernel.org To: linux-tip-commits@vger.kernel.org Subject: [tip: x86/core] x86,nospec: Simplify {JMP,CALL}_NOSPEC Cc: "Peter Zijlstra (Intel)" , x86@kernel.org, linux-kernel@vger.kernel.org MIME-Version: 1.0 Message-ID: <165839352183.15455.14514415205503862581.tip-bot2@tip-bot2> Robot-ID: Robot-Unsubscribe: Contact to get blacklisted from these emails Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The following commit has been merged into the x86/core branch of tip: Commit-ID: 09d09531a51a24635bc3331f56d92ee7092f5516 Gitweb: https://git.kernel.org/tip/09d09531a51a24635bc3331f56d92ee70= 92f5516 Author: Peter Zijlstra AuthorDate: Wed, 20 Jul 2022 12:04:21 +02:00 Committer: Peter Zijlstra CommitterDate: Thu, 21 Jul 2022 10:39:42 +02:00 x86,nospec: Simplify {JMP,CALL}_NOSPEC Have {JMP,CALL}_NOSPEC generate the same code GCC does for indirect calls and rely on the objtool retpoline patching infrastructure. There's no reason these should be alternatives while the vast bulk of compiler generated retpolines are not. Signed-off-by: Peter Zijlstra (Intel) --- arch/x86/include/asm/nospec-branch.h | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/arch/x86/include/asm/nospec-branch.h b/arch/x86/include/asm/no= spec-branch.h index 10a3bfc..42c09bc 100644 --- a/arch/x86/include/asm/nospec-branch.h +++ b/arch/x86/include/asm/nospec-branch.h @@ -94,25 +94,37 @@ .endm =20 /* + * Equivalent to -mindirect-branch-cs-prefix; emit the 5 byte jmp/call + * to the retpoline thunk with a CS prefix when the register requires + * a RAX prefix byte to encode. Also see apply_retpolines(). + */ +.macro __CS_PREFIX reg:req + .irp rs,r8,r9,r10,r11,r12,r13,r14,r15 + .ifc \reg,\rs + .byte 0x2e + .endif + .endr +.endm + +/* * JMP_NOSPEC and CALL_NOSPEC macros can be used instead of a simple * indirect jmp/call which may be susceptible to the Spectre variant 2 * attack. */ .macro JMP_NOSPEC reg:req #ifdef CONFIG_RETPOLINE - ALTERNATIVE_2 __stringify(ANNOTATE_RETPOLINE_SAFE; jmp *%\reg), \ - __stringify(jmp __x86_indirect_thunk_\reg), X86_FEATURE_RETPOLINE,= \ - __stringify(lfence; ANNOTATE_RETPOLINE_SAFE; jmp *%\reg), X86_FEAT= URE_RETPOLINE_LFENCE + __CS_PREFIX \reg + jmp __x86_indirect_thunk_\reg #else jmp *%\reg + int3 #endif .endm =20 .macro CALL_NOSPEC reg:req #ifdef CONFIG_RETPOLINE - ALTERNATIVE_2 __stringify(ANNOTATE_RETPOLINE_SAFE; call *%\reg), \ - __stringify(call __x86_indirect_thunk_\reg), X86_FEATURE_RETPOLINE= , \ - __stringify(lfence; ANNOTATE_RETPOLINE_SAFE; call *%\reg), X86_FEA= TURE_RETPOLINE_LFENCE + __CS_PREFIX \reg + call __x86_indirect_thunk_\reg #else call *%\reg #endif