CVE: CVE-2021-47428
Published: 2024-05-21
Description: In the Linux kernel, the following vulnerability has been resolved:

powerpc/64s: fix program check interrupt emergency stack path

Emergency stack path was jumping into a 3: label inside the
__GEN_COMMON_BODY macro for the normal path after it had finished,
rather than jumping over it. By a small miracle this is the correct
place to build up a new interrupt frame with the existing stack
pointer, so things basically worked okay with an added weird looking
700 trap frame on top (which had the wrong ->nip so it didn't decode
bug messages either).

Fix this by avoiding using numeric labels when jumping over non-trivial
macros.

Before:

 LE PAGE_SIZE=64K MMU=Radix SMP NR_CPUS=2048 NUMA PowerNV
 Modules linked in:
 CPU: 0 PID: 88 Comm: sh Not tainted 5.15.0-rc2-00034-ge057cdade6e5 #2637
 NIP:  [PII_REDACTED] LR: c[PII_REDACTED]6c0c8 CTR: c[PII_REDACTED]097f0
 REGS: c0000000fffb3a50 TRAP: 0700   Not tainted
 MSR:  [PII_REDACTED] <SF,HV,ME,IR,DR,LE>  CR: 00000700  XER: 20040000
 CFAR: c[PII_REDACTED]098b0 IRQMASK: 0
 GPR00: c[PII_REDACTED]6c964 c0000000fffb3cf0 c[PII_REDACTED]13800 [PII_REDACTED]
 GPR04:[PII_REDACTED]ab0778 [PII_REDACTED] [PII_REDACTED] [PII_REDACTED]
 GPR08: 000001e447c718ec [PII_REDACTED] [PII_REDACTED] c[PII_REDACTED]6bee8
 GPR12: [PII_REDACTED] c[PII_REDACTED]b0[PII_REDACTED]0000000b0 [PII_REDACTED]
 GPR16: [PII_REDACTED] [PII_REDACTED] [PII_REDACTED][PII_REDACTED]000ff8
 GPR20:[PII_REDACTED]001fff [PII_REDACTED] [PII_REDACTED] 00007fff89d90158
 GPR24: [PII_REDACTED] [PII_REDACTED] [PII_REDACTED] [PII_REDACTED]
 GPR28: c[PII_REDACTED]70000 [PII_REDACTED][PII_REDACTED]ab0778 c[PII_REDACTED]47e80
 NIP [[PII_REDACTED]] 0x[PII_REDACTED]657265
 LR [c[PII_REDACTED]6c0c8] ___do_page_fault+0x3f8/0xb10
 Call Trace:
 [c0000000fffb3cf0] [c[PII_REDACTED]0bdac] soft_nmi_common+0x13c/0x1d0 (unreliable)
 --- interrupt: 700 at decrementer_common_virt+0xb8/0x230
 NIP:  c[PII_REDACTED]098b8 LR: c[PII_REDACTED]6c0c8 CTR: c[PII_REDACTED]097f0
 REGS: c0000000fffb3d60 TRAP: 0700   Not tainted
 MSR:  [PII_REDACTED] <SF,HV,ME,IR,DR,LE>  CR: 22424282  XER: 20040000
 CFAR: c[PII_REDACTED]098b0 IRQMASK: 0
 GPR00: c[PII_REDACTED]6c964 [PII_REDACTED] c[PII_REDACTED]13800 [PII_REDACTED]
 GPR04:[PII_REDACTED]ab0778 [PII_REDACTED] [PII_REDACTED] [PII_REDACTED]
 GPR08: 000001e447c718ec [PII_REDACTED] [PII_REDACTED] c[PII_REDACTED]6bee8
 GPR12: [PII_REDACTED] c[PII_REDACTED]b0[PII_REDACTED]0000000b0 [PII_REDACTED]
 GPR16: [PII_REDACTED] [PII_REDACTED] [PII_REDACTED][PII_REDACTED]000ff8
 GPR20:[PII_REDACTED]001fff [PII_REDACTED] [PII_REDACTED] 00007fff89d90158
 GPR24: [PII_REDACTED] [PII_REDACTED] [PII_REDACTED] [PII_REDACTED]
 GPR28: c[PII_REDACTED]70000 [PII_REDACTED][PII_REDACTED]ab0778 c[PII_REDACTED]47e80
 NIP [c[PII_REDACTED]098b8] decrementer_common_virt+0xb8/0x230
 LR [c[PII_REDACTED]6c0c8] ___do_page_fault+0x3f8/0xb10
 --- interrupt: 700
 Instruction dump:
 XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX
 XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX
 ---[ end trace 6d28218e0cc3c949 ]---

After:

 ------------[ cut here ]------------
 kernel BUG at arch/powerpc/kernel/exceptions-64s.S:491!
 Oops: Exception in kernel mode, sig: 5 [#1]
 LE PAGE_SIZE=64K MMU=Radix SMP NR_CPUS=2048 NUMA PowerNV
 Modules linked in:
 CPU: 0 PID: 88 Comm: login Not tainted 5.15.0-rc2-00034-ge057cdade6e5-dirty #2638
 NIP:  c[PII_REDACTED]098b8 LR: c[PII_REDACTED]6bf04 CTR: c[PII_REDACTED]097f0
 REGS: c0000000fffb3d60 TRAP: 0700   Not tainted
 MSR:  [PII_REDACTED] <SF,HV,ME,IR,DR,LE>  CR: 24482227  XER: 00040000
 CFAR: c[PII_REDACTED]098b0 IRQMASK: 0
 GPR00: c[PII_REDACTED]6bf04 [PII_REDACTED] c[PII_REDACTED]13800 c[PII_REDACTED]71868
 GPR04:[PII_REDACTED]0f0d29 [PII_REDACTED] [PII_REDACTED] [PII_REDACTED]
 GPR08:[PII_REDACTED]0f0d29 [PII_REDACTED] [PII_REDACTED] c[PII_REDACTED]81b3c
 GPR12: [PII_REDACTED] c[PII_REDACTED]b0[PII_REDACTED]0100f0d29 c000000005b22f00
 GPR16: 00000000ffff0000 [PII_REDACTED] [PII_REDACTED][PII_REDACTED]0eed90
 GPR20:[PII_REDACTED]0eed90 00000
---truncated---
CVSS Score: 5.5 (MEDIUM)
References: https://git.kernel.org/stable/c/3e607dc4df180b72a38e75030cb0f94d12808712; https://git.kernel.org/stable/c/411b38fe68ba20a8bbe724b0939762c3f16e16ca; https://git.kernel.org/stable/c/c835b3d1d6362b4a4ebb192da7e7fd27a0a45d01