CVE-2022-49440

Severity CVSS v4.0:
Pending analysis
Type:
Unavailable / Other
Publication date:
26/02/2025
Last modified:
26/02/2025

Description

In the Linux kernel, the following vulnerability has been resolved:<br /> <br /> powerpc/rtas: Keep MSR[RI] set when calling RTAS<br /> <br /> RTAS runs in real mode (MSR[DR] and MSR[IR] unset) and in 32-bit big<br /> endian mode (MSR[SF,LE] unset).<br /> <br /> The change in MSR is done in enter_rtas() in a relatively complex way,<br /> since the MSR value could be hardcoded.<br /> <br /> Furthermore, a panic has been reported when hitting the watchdog interrupt<br /> while running in RTAS, this leads to the following stack trace:<br /> <br /> watchdog: CPU 24 Hard LOCKUP<br /> watchdog: CPU 24 TB:997512652051031, last heartbeat TB:997504470175378 (15980ms ago)<br /> ...<br /> Supported: No, Unreleased kernel<br /> CPU: 24 PID: 87504 Comm: drmgr Kdump: loaded Tainted: G E X 5.14.21-150400.71.1.bz196362_2-default #1 SLE15-SP4 (unreleased) 0d821077ef4faa8dfaf370efb5fdca1fa35f4e2c<br /> NIP: 000000001fb41050 LR: 000000001fb4104c CTR: 0000000000000000<br /> REGS: c00000000fc33d60 TRAP: 0100 Tainted: G E X (5.14.21-150400.71.1.bz196362_2-default)<br /> MSR: 8000000002981000 CR: 48800002 XER: 20040020<br /> CFAR: 000000000000011c IRQMASK: 1<br /> GPR00: 0000000000000003 ffffffffffffffff 0000000000000001 00000000000050dc<br /> GPR04: 000000001ffb6100 0000000000000020 0000000000000001 000000001fb09010<br /> GPR08: 0000000020000000 0000000000000000 0000000000000000 0000000000000000<br /> GPR12: 80040000072a40a8 c00000000ff8b680 0000000000000007 0000000000000034<br /> GPR16: 000000001fbf6e94 000000001fbf6d84 000000001fbd1db0 000000001fb3f008<br /> GPR20: 000000001fb41018 ffffffffffffffff 000000000000017f fffffffffffff68f<br /> GPR24: 000000001fb18fe8 000000001fb3e000 000000001fb1adc0 000000001fb1cf40<br /> GPR28: 000000001fb26000 000000001fb460f0 000000001fb17f18 000000001fb17000<br /> NIP [000000001fb41050] 0x1fb41050<br /> LR [000000001fb4104c] 0x1fb4104c<br /> Call Trace:<br /> Instruction dump:<br /> XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX<br /> XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX<br /> Oops: Unrecoverable System Reset, sig: 6 [#1]<br /> LE PAGE_SIZE=64K MMU=Hash SMP NR_CPUS=2048 NUMA pSeries<br /> ...<br /> Supported: No, Unreleased kernel<br /> CPU: 24 PID: 87504 Comm: drmgr Kdump: loaded Tainted: G E X 5.14.21-150400.71.1.bz196362_2-default #1 SLE15-SP4 (unreleased) 0d821077ef4faa8dfaf370efb5fdca1fa35f4e2c<br /> NIP: 000000001fb41050 LR: 000000001fb4104c CTR: 0000000000000000<br /> REGS: c00000000fc33d60 TRAP: 0100 Tainted: G E X (5.14.21-150400.71.1.bz196362_2-default)<br /> MSR: 8000000002981000 CR: 48800002 XER: 20040020<br /> CFAR: 000000000000011c IRQMASK: 1<br /> GPR00: 0000000000000003 ffffffffffffffff 0000000000000001 00000000000050dc<br /> GPR04: 000000001ffb6100 0000000000000020 0000000000000001 000000001fb09010<br /> GPR08: 0000000020000000 0000000000000000 0000000000000000 0000000000000000<br /> GPR12: 80040000072a40a8 c00000000ff8b680 0000000000000007 0000000000000034<br /> GPR16: 000000001fbf6e94 000000001fbf6d84 000000001fbd1db0 000000001fb3f008<br /> GPR20: 000000001fb41018 ffffffffffffffff 000000000000017f fffffffffffff68f<br /> GPR24: 000000001fb18fe8 000000001fb3e000 000000001fb1adc0 000000001fb1cf40<br /> GPR28: 000000001fb26000 000000001fb460f0 000000001fb17f18 000000001fb17000<br /> NIP [000000001fb41050] 0x1fb41050<br /> LR [000000001fb4104c] 0x1fb4104c<br /> Call Trace:<br /> Instruction dump:<br /> XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX<br /> XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX<br /> ---[ end trace 3ddec07f638c34a2 ]---<br /> <br /> This happens because MSR[RI] is unset when entering RTAS but there is no<br /> valid reason to not set it here.<br /> <br /> RTAS is expected to be called with MSR[RI] as specified in PAPR+ section<br /> "7.2.1 Machine State":<br /> <br /> R1–7.2.1–9. If called with MSR[RI] equal to 1, then RTAS must protect<br /> its own critical regions from recursion by setting the MSR[RI] bit to<br /> 0 when in the critical regions.<br /> <br /> Fixing this by reviewing the way MSR is compute before calling RTAS. Now a<br /> hardcoded value meaning real <br /> ---truncated---

Impact