All of lore.kernel.org
 help / color / mirror / Atom feed
From: Thadeu Lima de Souza Cascardo <cascardo@canonical.com>
To: linux-kernel@vger.kernel.org
Cc: x86@kernel.org,
	Thadeu Lima de Souza Cascardo <cascardo@canonical.com>,
	Dimitri John Ledkov <dimitri.ledkov@canonical.com>,
	Peter Zijlstra <peterz@infradead.org>,
	Borislav Petkov <bp@suse.de>,
	stable@vger.kernel.org
Subject: [PATCH] x86/bugs: Do not enable IBPB at firmware entry when IBPB is not available
Date: Thu, 28 Jul 2022 09:26:02 -0300	[thread overview]
Message-ID: <20220728122602.2500509-1-cascardo@canonical.com> (raw)

Some cloud hypervisors do not provide IBPB on very recent CPU processors,
including AMD processors affected by Retbleed.

Using IBPB before firmware calls on such systems would cause a GPF at boot
like the one below. Do not enable such calls when IBPB support is not
present.

[    0.997530] EFI Variables Facility v0.08 2004-May-17
[    0.998866] general protection fault, maybe for address 0x1: 0000 [#1] PREEMPT SMP NOPTI
[    1.000393] CPU: 0 PID: 24 Comm: kworker/u2:1 Not tainted 5.19.0-rc8+ #7
[    1.000393] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 0.0.0 02/06/2015
[    1.000393] Workqueue: efi_rts_wq efi_call_rts
[    1.000393] RIP: 0010:efi_call_rts+0x66e/0x8a0
[    1.000393] Code: e8 37 33 58 ff 41 bf 48 00 00 00 49 89 c0 44 89 f9 48 83 c8 01 4c 89 c2 48 c1 ea 20 66 90 b9 49 00 00 00 b8 01 00 00 00 31 d2 <0f> 30 e8 7b 9f 5d ff e8 f6 f8 ff ff 4c 89 f1 4c 89 ea 4c 89 e6 48
[    1.000393] RSP: 0018:ffffb373800d7e38 EFLAGS: 00010246
[    1.000393] RAX: 0000000000000001 RBX: 0000000000000006 RCX: 0000000000000049
[    1.000393] RDX: 0000000000000000 RSI: ffff94fbc19d8fe0 RDI: ffff94fbc1b2b300
[    1.000393] RBP: ffffb373800d7e70 R08: 0000000000000000 R09: 0000000000000000
[    1.000393] R10: 000000000000000b R11: 000000000000000b R12: ffffb3738001fd78
[    1.000393] R13: ffff94fbc2fcfc00 R14: ffffb3738001fd80 R15: 0000000000000048
[    1.000393] FS:  0000000000000000(0000) GS:ffff94fc3da00000(0000) knlGS:0000000000000000
[    1.000393] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[    1.000393] CR2: ffff94fc30201000 CR3: 000000006f610000 CR4: 00000000000406f0
[    1.000393] Call Trace:
[    1.000393]  <TASK>
[    1.000393]  ? __wake_up+0x13/0x20
[    1.000393]  process_one_work+0x21f/0x3f0
[    1.000393]  worker_thread+0x50/0x3e0
[    1.000393]  ? rescuer_thread+0x3a0/0x3a0
[    1.000393]  kthread+0xee/0x120
[    1.000393]  ? kthread_complete_and_exit+0x20/0x20
[    1.000393]  ret_from_fork+0x22/0x30
[    1.000393]  </TASK>
[    1.000393] Modules linked in:
[    1.037117] ---[ end trace 0000000000000000 ]---
[    1.038324] RIP: 0010:efi_call_rts+0x66e/0x8a0
[    1.039650] Code: e8 37 33 58 ff 41 bf 48 00 00 00 49 89 c0 44 89 f9 48 83 c8 01 4c 89 c2 48 c1 ea 20 66 90 b9 49 00 00 00 b8 01 00 00 00 31 d2 <0f> 30 e8 7b 9f 5d ff e8 f6 f8 ff ff 4c 89 f1 4c 89 ea 4c 89 e6 48
[    1.044235] RSP: 0018:ffffb373800d7e38 EFLAGS: 00010246
[    1.045513] RAX: 0000000000000001 RBX: 0000000000000006 RCX: 0000000000000049
[    1.047260] RDX: 0000000000000000 RSI: ffff94fbc19d8fe0 RDI: ffff94fbc1b2b300
[    1.049014] RBP: ffffb373800d7e70 R08: 0000000000000000 R09: 0000000000000000
[    1.050762] R10: 000000000000000b R11: 000000000000000b R12: ffffb3738001fd78
[    1.052521] R13: ffff94fbc2fcfc00 R14: ffffb3738001fd80 R15: 0000000000000048
[    1.054243] FS:  0000000000000000(0000) GS:ffff94fc3da00000(0000) knlGS:0000000000000000
[    1.056228] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[    1.057632] CR2: ffff94fc30201000 CR3: 000000006f610000 CR4: 00000000000406f0
[    1.059393] note: kworker/u2:1[24] exited with preempt_count 2

Fixes: 28a99e95f55c ("x86/amd: Use IBPB for firmware calls")
Reported-by: Dimitri John Ledkov <dimitri.ledkov@canonical.com>
Signed-off-by: Thadeu Lima de Souza Cascardo <cascardo@canonical.com>
Cc: Peter Zijlstra (Intel) <peterz@infradead.org>
Cc: Borislav Petkov <bp@suse.de>
Cc: <stable@vger.kernel.org>
---
 arch/x86/kernel/cpu/bugs.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/arch/x86/kernel/cpu/bugs.c b/arch/x86/kernel/cpu/bugs.c
index 6454bc767f0f..6761668100b9 100644
--- a/arch/x86/kernel/cpu/bugs.c
+++ b/arch/x86/kernel/cpu/bugs.c
@@ -1520,6 +1520,7 @@ static void __init spectre_v2_select_mitigation(void)
 	 * enable IBRS around firmware calls.
 	 */
 	if (boot_cpu_has_bug(X86_BUG_RETBLEED) &&
+	    boot_cpu_has(X86_FEATURE_IBPB) &&
 	    (boot_cpu_data.x86_vendor == X86_VENDOR_AMD ||
 	     boot_cpu_data.x86_vendor == X86_VENDOR_HYGON)) {
 
-- 
2.34.1


             reply	other threads:[~2022-07-28 12:27 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-07-28 12:26 Thadeu Lima de Souza Cascardo [this message]
2022-07-28 12:35 ` [PATCH] x86/bugs: Do not enable IBPB at firmware entry when IBPB is not available Borislav Petkov
2022-07-28 12:39   ` Thadeu Lima de Souza Cascardo
2022-07-28 14:33   ` Dimitri John Ledkov
2022-07-28 15:18     ` Borislav Petkov
2022-07-28 15:50       ` Borislav Petkov
2022-07-28 17:01         ` Thadeu Lima de Souza Cascardo
2022-07-29 18:22           ` Borislav Petkov
2022-07-28 15:16 ` Peter Zijlstra
2022-07-29  8:11 ` [tip: x86/urgent] " tip-bot2 for Thadeu Lima de Souza Cascardo

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220728122602.2500509-1-cascardo@canonical.com \
    --to=cascardo@canonical.com \
    --cc=bp@suse.de \
    --cc=dimitri.ledkov@canonical.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=peterz@infradead.org \
    --cc=stable@vger.kernel.org \
    --cc=x86@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.