| From bippy-1.2.0 Mon Sep 17 00:00:00 2001 |
| From: Greg Kroah-Hartman <gregkh@kernel.org> |
| To: <linux-cve-announce@vger.kernel.org> |
| Reply-to: <cve@kernel.org>, <linux-kernel@vger.kernel.org> |
| Subject: CVE-2024-42126: powerpc: Avoid nmi_enter/nmi_exit in real mode interrupt. |
| |
| Description |
| =========== |
| |
| In the Linux kernel, the following vulnerability has been resolved: |
| |
| powerpc: Avoid nmi_enter/nmi_exit in real mode interrupt. |
| |
| nmi_enter()/nmi_exit() touches per cpu variables which can lead to kernel |
| crash when invoked during real mode interrupt handling (e.g. early HMI/MCE |
| interrupt handler) if percpu allocation comes from vmalloc area. |
| |
| Early HMI/MCE handlers are called through DEFINE_INTERRUPT_HANDLER_NMI() |
| wrapper which invokes nmi_enter/nmi_exit calls. We don't see any issue when |
| percpu allocation is from the embedded first chunk. However with |
| CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK enabled there are chances where percpu |
| allocation can come from the vmalloc area. |
| |
| With kernel command line "percpu_alloc=page" we can force percpu allocation |
| to come from vmalloc area and can see kernel crash in machine_check_early: |
| |
| [ 1.215714] NIP [c000000000e49eb4] rcu_nmi_enter+0x24/0x110 |
| [ 1.215717] LR [c0000000000461a0] machine_check_early+0xf0/0x2c0 |
| [ 1.215719] --- interrupt: 200 |
| [ 1.215720] [c000000fffd73180] [0000000000000000] 0x0 (unreliable) |
| [ 1.215722] [c000000fffd731b0] [0000000000000000] 0x0 |
| [ 1.215724] [c000000fffd73210] [c000000000008364] machine_check_early_common+0x134/0x1f8 |
| |
| Fix this by avoiding use of nmi_enter()/nmi_exit() in real mode if percpu |
| first chunk is not embedded. |
| |
| The Linux kernel CVE team has assigned CVE-2024-42126 to this issue. |
| |
| |
| Affected and fixed versions |
| =========================== |
| |
| Issue introduced in 5.10 with commit eb553f16973ade990d05946af9ae191394712c8a and fixed in 5.10.224 with commit fb6675db04c4b79883373edc578d5df7bbc84848 |
| Issue introduced in 5.10 with commit eb553f16973ade990d05946af9ae191394712c8a and fixed in 5.15.165 with commit e2afb26615adf6c3ceaaa7732aa839bcd587a057 |
| Issue introduced in 5.10 with commit eb553f16973ade990d05946af9ae191394712c8a and fixed in 6.1.98 with commit 8d3f83dfb23674540c827a8d65fba20aa300b252 |
| Issue introduced in 5.10 with commit eb553f16973ade990d05946af9ae191394712c8a and fixed in 6.6.39 with commit 0f37946c62c48a907625348cbc720a7a0c547d1e |
| Issue introduced in 5.10 with commit eb553f16973ade990d05946af9ae191394712c8a and fixed in 6.9.9 with commit 2c78c9411e685dbc9eac8c2845111b03501975b8 |
| Issue introduced in 5.10 with commit eb553f16973ade990d05946af9ae191394712c8a and fixed in 6.10 with commit 0db880fc865ffb522141ced4bfa66c12ab1fbb70 |
| |
| Please see https://www.kernel.org for a full list of currently supported |
| kernel versions by the kernel community. |
| |
| Unaffected versions might change over time as fixes are backported to |
| older supported kernel versions. The official CVE entry at |
| https://cve.org/CVERecord/?id=CVE-2024-42126 |
| will be updated if fixes are backported, please check that for the most |
| up to date information about this issue. |
| |
| |
| Affected files |
| ============== |
| |
| The file(s) affected by this issue are: |
| arch/powerpc/include/asm/interrupt.h |
| arch/powerpc/include/asm/percpu.h |
| arch/powerpc/kernel/setup_64.c |
| |
| |
| Mitigation |
| ========== |
| |
| The Linux kernel CVE team recommends that you update to the latest |
| stable kernel version for this, and many other bugfixes. Individual |
| changes are never tested alone, but rather are part of a larger kernel |
| release. Cherry-picking individual commits is not recommended or |
| supported by the Linux kernel community at all. If however, updating to |
| the latest release is impossible, the individual changes to resolve this |
| issue can be found at these commits: |
| https://git.kernel.org/stable/c/fb6675db04c4b79883373edc578d5df7bbc84848 |
| https://git.kernel.org/stable/c/e2afb26615adf6c3ceaaa7732aa839bcd587a057 |
| https://git.kernel.org/stable/c/8d3f83dfb23674540c827a8d65fba20aa300b252 |
| https://git.kernel.org/stable/c/0f37946c62c48a907625348cbc720a7a0c547d1e |
| https://git.kernel.org/stable/c/2c78c9411e685dbc9eac8c2845111b03501975b8 |
| https://git.kernel.org/stable/c/0db880fc865ffb522141ced4bfa66c12ab1fbb70 |