Re: [PATCH] x86/alternatives: gracefully skip unrecognized indirect call instructions

From: 李则良

Date: Wed Aug 12 2026 - 13:16:50 EST


>
> I don't think we want to cater for this. But what actual instruction
> sequences is it emitting?

This is the scene that triggers the bug, which can be perfectly
reproduced when KCFLAGS=-O1.

[ 0.111827] SMP alternatives: ALT_FLAG_DIRECT_CALL set for
unrecognized indirect call
[ 0.112083] ------------[ cut here ]------------
[ 0.112417] kernel BUG at arch/x86/kernel/alternative.c:558!
[ 0.113080] Oops: invalid opcode: 0000 [#1] SMP NOPTI
[ 0.113424] CPU: 0 UID: 0 PID: 0 Comm: swapper/0 Not tainted
7.2.0-rc7-00016-g3d6d817622b0-dirty #2 PREEMPT(lazy)
[ 0.114077] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009),
BIOS 1.17.0-debian-1.17.0-1ubuntu1 04/01/2014
[ 0.114077] RIP: 0010:apply_alternatives+0x3a6/0x540
[ 0.114077] Code: 8d 04 80 89 95 d1 fe ff ff e9 dd fe ff ff 48 c7
c7 f8 88 9d 82 e8 ea 94 0d 00 90 0f 0b 48 c7 c7 50 89 9d 82 e8 db 94
0d 00 90 <0f> 0b 80 7d ce 00 75 0d 41 80 7e 0d 00 0f 84 14 ff ff ff eb
62 48
[ 0.114077] RSP: 0000:ffffffff82c03d60 EFLAGS: 00010246
[ 0.114077] RAX: 0000000000000049 RBX: ffffffff831dae1c RCX: 0000000000000003
[ 0.114077] RDX: 0000000000000000 RSI: ffffffff82d3cd08 RDI: 0000000000000001
[ 0.114077] RBP: ffffffff82c03ea8 R08: 0000000000000000 R09: 205d373238313131
[ 0.114077] R10: 7265746c6120504d R11: 65746c6120504d53 R12: ffffffff831e116c
[ 0.114077] R13: ffffffff82ee2880 R14: ffffffff831dae0e R15: ffffffff831e1f58
[ 0.114077] FS: 0000000000000000(0000) GS:ffff8882f4a18000(0000)
knlGS:0000000000000000
[ 0.114077] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[ 0.114077] CR2: ffff88827ffff000 CR3: 0000000002c30001 CR4: 0000000000770ef0
[ 0.114077] PKRU: 55555554
[ 0.114077] Call Trace:
[ 0.114077] <TASK>
[ 0.114077] ? insn_get_sib+0x21/0x80
[ 0.114077] ? early_fixup_exception+0x85/0xa0
[ 0.114077] alternative_instructions+0x76/0x110
[ 0.114077] arch_cpu_finalize_init+0x113/0x170
[ 0.114077] start_kernel+0x794/0x820
[ 0.114077] x86_64_start_reservations+0x28/0x30
[ 0.114077] x86_64_start_kernel+0xdc/0xe0
[ 0.114077] common_startup_64+0x13e/0x158
[ 0.114077] RIP: 1f0f:0x2e66000000000084
[ 0.114077] Code: Unable to access opcode bytes at 0x2e6600000000005a.
[ 0.114077] RSP: 0000:00841f0f2e660000 EFLAGS: 841f0f2e66 ORIG_RAX:
1f0f2e6600000000
[ 0.114077] RAX: 1f0f2e6600000000 RBX: 1f0f2e6600000000 RCX: 2e66000000000084
[ 0.114077] RDX: 0000000000841f0f RSI: 000000841f0f2e66 RDI: 00841f0f2e660000
[ 0.114077] RBP: 00841f0f2e660000 R08: 00841f0f2e660000 R09: 000000841f0f2e66
[ 0.114077] R10: 0000000000841f0f R11: 2e66000000000084 R12: 000000841f0f2e66
[ 0.114077] R13: 0000000000841f0f R14: 2e66000000000084 R15: 1f0f2e6600000000
[ 0.114077] </TASK>
[ 0.114077] Modules linked in:
[ 0.114078] ---[ end trace 0000000000000000 ]---
[ 0.114405] RIP: 0010:apply_alternatives+0x3a6/0x540
[ 0.115078] Code: 8d 04 80 89 95 d1 fe ff ff e9 dd fe ff ff 48 c7
c7 f8 88 9d 82 e8 ea 94 0d 00 90 0f 0b 48 c7 c7 50 89 9d 82 e8 db 94
0d 00 90 <0f> 0b 80 7d ce 00 75 0d 41 80 7e 0d 00 0f 84 14 ff ff ff eb
62 48
[ 0.116078] RSP: 0000:ffffffff82c03d60 EFLAGS: 00010246
[ 0.116456] RAX: 0000000000000049 RBX: ffffffff831dae1c RCX: 0000000000000003
[ 0.117077] RDX: 0000000000000000 RSI: ffffffff82d3cd08 RDI: 0000000000000001
[ 0.117589] RBP: ffffffff82c03ea8 R08: 0000000000000000 R09: 205d373238313131
[ 0.118077] R10: 7265746c6120504d R11: 65746c6120504d53 R12: ffffffff831e116c
[ 0.118585] R13: ffffffff82ee2880 R14: ffffffff831dae0e R15: ffffffff831e1f58
[ 0.119077] FS: 0000000000000000(0000) GS:ffff8882f4a18000(0000)
knlGS:0000000000000000
[ 0.119642] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[ 0.120077] CR2: ffff88827ffff000 CR3: 0000000002c30001 CR4: 0000000000770ef0
[ 0.120537] PKRU: 55555554
[ 0.121078] Kernel panic - not syncing: Attempted to kill the idle task!
[ 0.121545] ---[ end Kernel panic - not syncing: Attempted to kill
the idle task! ]---

--
KISS == Keep it simple,stupid~:-)
http://lizeliang.org