| From bippy-5f407fcff5a0 Mon Sep 17 00:00:00 2001 |
| From: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| To: <linux-cve-announce@vger.kernel.org> |
| Reply-to: <cve@kernel.org>, <linux-kernel@vger.kernel.org> |
| Subject: CVE-2024-26712: powerpc/kasan: Fix addr error caused by page alignment |
| |
| Description |
| =========== |
| |
| In the Linux kernel, the following vulnerability has been resolved: |
| |
| powerpc/kasan: Fix addr error caused by page alignment |
| |
| In kasan_init_region, when k_start is not page aligned, at the begin of |
| for loop, k_cur = k_start & PAGE_MASK is less than k_start, and then |
| `va = block + k_cur - k_start` is less than block, the addr va is invalid, |
| because the memory address space from va to block is not alloced by |
| memblock_alloc, which will not be reserved by memblock_reserve later, it |
| will be used by other places. |
| |
| As a result, memory overwriting occurs. |
| |
| for example: |
| int __init __weak kasan_init_region(void *start, size_t size) |
| { |
| [...] |
| /* if say block(dcd97000) k_start(feef7400) k_end(feeff3fe) */ |
| block = memblock_alloc(k_end - k_start, PAGE_SIZE); |
| [...] |
| for (k_cur = k_start & PAGE_MASK; k_cur < k_end; k_cur += PAGE_SIZE) { |
| /* at the begin of for loop |
| * block(dcd97000) va(dcd96c00) k_cur(feef7000) k_start(feef7400) |
| * va(dcd96c00) is less than block(dcd97000), va is invalid |
| */ |
| void *va = block + k_cur - k_start; |
| [...] |
| } |
| [...] |
| } |
| |
| Therefore, page alignment is performed on k_start before |
| memblock_alloc() to ensure the validity of the VA address. |
| |
| The Linux kernel CVE team has assigned CVE-2024-26712 to this issue. |
| |
| |
| Affected and fixed versions |
| =========================== |
| |
| Issue introduced in 5.4 with commit 663c0c9496a69f80011205ba3194049bcafd681d and fixed in 5.10.210 with commit 230e89b5ad0a33f530a2a976b3e5e4385cb27882 |
| Issue introduced in 5.4 with commit 663c0c9496a69f80011205ba3194049bcafd681d and fixed in 5.15.149 with commit 2738e0aa2fb24a7ab9c878d912dc2b239738c6c6 |
| Issue introduced in 5.4 with commit 663c0c9496a69f80011205ba3194049bcafd681d and fixed in 6.1.79 with commit 0c09912dd8387e228afcc5e34ac5d79b1e3a1058 |
| Issue introduced in 5.4 with commit 663c0c9496a69f80011205ba3194049bcafd681d and fixed in 6.6.18 with commit 0516c06b19dc64807c10e01bb99b552bdf2d7dbe |
| Issue introduced in 5.4 with commit 663c0c9496a69f80011205ba3194049bcafd681d and fixed in 6.7.6 with commit 70ef2ba1f4286b2b73675aeb424b590c92d57b25 |
| Issue introduced in 5.4 with commit 663c0c9496a69f80011205ba3194049bcafd681d and fixed in 6.8 with commit 4a7aee96200ad281a5cc4cf5c7a2e2a49d2b97b0 |
| Issue introduced in 5.3.6 with commit 5ce93076d8ee2a0fac3ad4adbd2e91b6197146db |
| |
| 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-26712 |
| 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/mm/kasan/init_32.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/230e89b5ad0a33f530a2a976b3e5e4385cb27882 |
| https://git.kernel.org/stable/c/2738e0aa2fb24a7ab9c878d912dc2b239738c6c6 |
| https://git.kernel.org/stable/c/0c09912dd8387e228afcc5e34ac5d79b1e3a1058 |
| https://git.kernel.org/stable/c/0516c06b19dc64807c10e01bb99b552bdf2d7dbe |
| https://git.kernel.org/stable/c/70ef2ba1f4286b2b73675aeb424b590c92d57b25 |
| https://git.kernel.org/stable/c/4a7aee96200ad281a5cc4cf5c7a2e2a49d2b97b0 |