CVE-2024-45022

mm/vmalloc: fix page mapping if vm_area_alloc_pages() with high order fallback to order 0

State
Published
Severity
7.8 High
Published
Sep 11, 2024
Updated
Aug 5, 2026
Reserved
Aug 21, 2024

Read the record on cve.org

Description

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

mm/vmalloc: fix page mapping if vm_area_alloc_pages() with high order fallback to order 0

The __vmap_pages_range_noflush() assumes its argument pages** contains pages with the same page shift. However, since commit e9c3cda4d86e ("mm, vmalloc: fix high order __GFP_NOFAIL allocations"), if gfp_flags includes __GFP_NOFAIL with high order in vm_area_alloc_pages() and page allocation failed for high order, the pages** may contain two different page shifts (high order and order-0). This could lead __vmap_pages_range_noflush() to perform incorrect mappings, potentially resulting in memory corruption.

Users might encounter this as follows (vmap_allow_huge = true, 2M is for PMD_SIZE):

kvmalloc(2M, __GFP_NOFAIL|GFP_X) __vmalloc_node_range_noprof(vm_flags=VM_ALLOW_HUGE_VMAP) vm_area_alloc_pages(order=9) ---> order-9 allocation failed and fallback to order-0 vmap_pages_range() vmap_pages_range_noflush() __vmap_pages_range_noflush(page_shift = 21) ----> wrong mapping happens

We can remove the fallback code because if a high-order allocation fails, __vmalloc_node_range_noprof() will retry with order-0. Therefore, it is unnecessary to fallback to order-0 here. Therefore, fix this by removing the fallback code.

Scores

CVSSScoreVectorSource
3.17.8 HighCVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:HLinux

Weaknesses

The record names no weakness.

Affected Products

ProductVersions
LinuxLinux
  • fe5c2bdcb14c8612eb5e7a09159801c7219e9ac4 to before fd1ffbb50ef4da5e1378a46616b6d7407dc795daAffected
  • e9c3cda4d86e56bf7fe403729f38c4f0f65d3860 to before de7bad86345c43cd040ed43e20d9fad78a3ee59fAffected
  • e9c3cda4d86e56bf7fe403729f38c4f0f65d3860 to before c91618816f4d21fc574d7577a37722adcd4075b2Affected
  • e9c3cda4d86e56bf7fe403729f38c4f0f65d3860 to before 61ebe5a747da649057c37be1c37eb934b4af79caAffected
  • 6.1.95 to before 6.1.107Affected
LinuxLinux
  • 6.3Affected
  • before 6.3Not affected
  • 6.1.107 through 6.1.*Not affected
  • 6.6.48 through 6.6.*Not affected
  • 6.10.7 through 6.10.*Not affected
  • 6.11 and laterNot affected

References

Every record here comes from the CVE Program’s CVE List. © 1999–2026 The MITRE Corporation. CVE is a registered trademark of The MITRE Corporation. The records are reproduced under the CVE Program terms of use.