CVE-2024-57945CWE-125

CVE-2024-57945

High · published January 21, 2025

CVSS v3.1
7.8
EPSS
0%
Percentile
10.9
In the wild
Unconfirmed
What it is

In the Linux kernel, the following vulnerability has been resolved:

riscv: mm: Fix the out of bound issue of vmemmap address

In sparse vmemmap model, the virtual address of vmemmap is calculated as:

((struct page *)VMEMMAP_START - (phys_ram_base >> PAGE_SHIFT)).

And the struct page's va can be calculated with an offset:

(vmemmap + (pfn)).

However, when initializing struct pages, kernel actually starts from the

first page from the same section that phys_ram_base belongs to. If the

first page's physical address is not (phys_ram_base >> PAGE_SHIFT), then

we get an va below VMEMMAP_START when calculating va for it's struct page.

For example, if phys_ram_base starts from 0x82000000 with pfn 0x82000, the

first page in the same section is actually pfn 0x80000. During

init_unavailable_range(), we will initialize struct page for pfn 0x80000

with virtual address ((struct page *)VMEMMAP_START - 0x2000), which is

below VMEMMAP_START as well as PCI_IO_END.

This commit fixes this bug by introducing a new variable

'vmemmap_start_pfn' which is aligned with memory section size and using

it to calculate vmemmap address instead of phys_ram_base.

The record
Technical detail
CVSS v3.1
7.8 · HIGH
Vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
CVSS v4.0
Not supplied
EPSS
0.00212 · 10.9th percentile
Weakness
CWE-125 · Out-of-bounds Read
Published
2025-01-21T18:15Z
Affected products (14)
ProductVersionsFixed in
linux/linux_kernel≥ 5.10.212, < 5.115.11
linux/linux_kernel≥ 5.15.151, < 5.165.16
linux/linux_kernel≥ 6.1.81, < 6.1.1406.1.140
linux/linux_kernel≥ 6.6.21, < 6.6.726.6.72
linux/linux_kernel≥ 6.7.9, < 6.86.8
linux/linux_kernel≥ 6.8.1, < 6.12.106.12.10
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
linux/linux_kernelall versions—
References (6)
EPSS history
Timeline
  • 21 JAN 12:18Z
    riscv: mm: Fix the out of bound issue of vmemmap address
    cvelistv5