Goal Reached Thanks to every supporter — we hit 100%!

Goal: 1000 CNY · Raised: 1336 CNY

100%

CVE-2024-45024— mm/hugetlb: fix hugetlb vs. core-mm PT locking

Quick assessment

Affected
Linux Linux
Exploitation
No confirmed in-the-wild exploitation; assess based on exposure
Recommended action
Check the vendor advisory and references for a fixed version. If immediate upgrade is impossible, restrict exposure and increase monitoring.

Linux kernel是美国Linux基金会的开源操作系统Linux所使用的内核。 Linux kernel存在安全漏洞,该漏洞源于mm/hugetlb组件存在页表锁定问题。

CVSS 7.8 · High EPSS 0.15% · P4

Affected Version Matrix 6

VendorProduct Version RangeStatus
Linux Linux 9cb28da54643ad464c47585cd5866c30b0218e67< 7300dadba49e531af2d890ae4e34c9b115384a62 affected
9cb28da54643ad464c47585cd5866c30b0218e67< 5f75cfbd6bb02295ddaed48adf667b6c828ce07b affected
6.10 affected
< 6.10 unaffected
6.10.7≤ 6.10.* unaffected
6.11≤ * unaffected
Get alerts for future matching vulnerabilities Log in to subscribe

I. Basic Information for CVE-2024-45024

Vulnerability Information

Have questions about the vulnerability? See if Shenlong's analysis helps!
View Shenlong Deep Dive ↗

Although we use advanced large model technology, its output may still contain inaccurate or outdated information.Shenlong tries to ensure data accuracy, but please verify and judge based on the actual situation.

Vulnerability Title
mm/hugetlb: fix hugetlb vs. core-mm PT locking
Source: CVE Program / CVE List V5
Vulnerability Description
In the Linux kernel, the following vulnerability has been resolved: mm/hugetlb: fix hugetlb vs. core-mm PT locking We recently made GUP's common page table walking code to also walk hugetlb VMAs without most hugetlb special-casing, preparing for the future of having less hugetlb-specific page table walking code in the codebase. Turns out that we missed one page table locking detail: page table locking for hugetlb folios that are not mapped using a single PMD/PUD. Assume we have hugetlb folio that spans multiple PTEs (e.g., 64 KiB hugetlb folios on arm64 with 4 KiB base page size). GUP, as it walks the page tables, will perform a pte_offset_map_lock() to grab the PTE table lock. However, hugetlb that concurrently modifies these page tables would actually grab the mm->page_table_lock: with USE_SPLIT_PTE_PTLOCKS, the locks would differ. Something similar can happen right now with hugetlb folios that span multiple PMDs when USE_SPLIT_PMD_PTLOCKS. This issue can be reproduced [1], for example triggering: [ 3105.936100] ------------[ cut here ]------------ [ 3105.939323] WARNING: CPU: 31 PID: 2732 at mm/gup.c:142 try_grab_folio+0x11c/0x188 [ 3105.944634] Modules linked in: [...] [ 3105.974841] CPU: 31 PID: 2732 Comm: reproducer Not tainted 6.10.0-64.eln141.aarch64 #1 [ 3105.980406] Hardware name: QEMU KVM Virtual Machine, BIOS edk2-20240524-4.fc40 05/24/2024 [ 3105.986185] pstate: 60000005 (nZCv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--) [ 3105.991108] pc : try_grab_folio+0x11c/0x188 [ 3105.994013] lr : follow_page_pte+0xd8/0x430 [ 3105.996986] sp : ffff80008eafb8f0 [ 3105.999346] x29: ffff80008eafb900 x28: ffffffe8d481f380 x27: 00f80001207cff43 [ 3106.004414] x26: 0000000000000001 x25: 0000000000000000 x24: ffff80008eafba48 [ 3106.009520] x23: 0000ffff9372f000 x22: ffff7a54459e2000 x21: ffff7a546c1aa978 [ 3106.014529] x20: ffffffe8d481f3c0 x19: 0000000000610041 x18: 0000000000000001 [ 3106.019506] x17: 0000000000000001 x16: ffffffffffffffff x15: 0000000000000000 [ 3106.024494] x14: ffffb85477fdfe08 x13: 0000ffff9372ffff x12: 0000000000000000 [ 3106.029469] x11: 1fffef4a88a96be1 x10: ffff7a54454b5f0c x9 : ffffb854771b12f0 [ 3106.034324] x8 : 0008000000000000 x7 : ffff7a546c1aa980 x6 : 0008000000000080 [ 3106.038902] x5 : 00000000001207cf x4 : 0000ffff9372f000 x3 : ffffffe8d481f000 [ 3106.043420] x2 : 0000000000610041 x1 : 0000000000000001 x0 : 0000000000000000 [ 3106.047957] Call trace: [ 3106.049522] try_grab_folio+0x11c/0x188 [ 3106.051996] follow_pmd_mask.constprop.0.isra.0+0x150/0x2e0 [ 3106.055527] follow_page_mask+0x1a0/0x2b8 [ 3106.058118] __get_user_pages+0xf0/0x348 [ 3106.060647] faultin_page_range+0xb0/0x360 [ 3106.063651] do_madvise+0x340/0x598 Let's make huge_pte_lockptr() effectively use the same PT locks as any core-mm page table walker would. Add ptep_lockptr() to obtain the PTE page table lock using a pte pointer -- unfortunately we cannot convert pte_lockptr() because virt_to_page() doesn't work with kmap'ed page tables we can have with CONFIG_HIGHPTE. Handle CONFIG_PGTABLE_LEVELS correctly by checking in reverse order, such that when e.g., CONFIG_PGTABLE_LEVELS==2 with PGDIR_SIZE==P4D_SIZE==PUD_SIZE==PMD_SIZE will work as expected. Document why that works. There is one ugly case: powerpc 8xx, whereby we have an 8 MiB hugetlb folio being mapped using two PTE page tables. While hugetlb wants to take the PMD table lock, core-mm would grab the PTE table lock of one of both PTE page tables. In such corner cases, we have to make sure that both locks match, which is (fortunately!) currently guaranteed for 8xx as it does not support SMP and consequently doesn't use split PT locks. [1] https://lore.kernel.org/all/1bbfcc7f-f222-45a5-ac44-c5a1381c596d@redhat.com/
Source: CVE Program / CVE List V5
CVSS Information
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Source: CVE Program / CVE List V5
Vulnerability Type
N/A
Source: CVE Program / CVE List V5
Vulnerability Title
Linux kernel 安全漏洞
Source: CNNVD (China National Vulnerability Database)
Vulnerability Description
Linux kernel是美国Linux基金会的开源操作系统Linux所使用的内核。 Linux kernel存在安全漏洞,该漏洞源于mm/hugetlb组件存在页表锁定问题。
Source: CNNVD (China National Vulnerability Database)
CVSS Information
N/A
Source: CNNVD (China National Vulnerability Database)
Vulnerability Type
N/A
Source: CNNVD (China National Vulnerability Database)

Affected Products

Vendor Product Affected Versions CPE Subscribe
Linux Linux 9cb28da54643ad464c47585cd5866c30b0218e67 ~ 7300dadba49e531af2d890ae4e34c9b115384a62 -
Linux Linux 6.10 -

II. Public POCs for CVE-2024-45024

# POC Description Source Link Shenlong Link
AI-Generated POC Premium

No public POC found.

Login to generate AI POC

III. Intelligence Information for CVE-2024-45024

登录查看更多情报信息。

Patches & Fixes for CVE-2024-45024 (2)

Same Patch Batch · Linux · 2024-09-11 · 23 CVEs total

CVE-2024-45030 9.8 CRITICAL igb: cope with large MAX_SKB_FRAGS
CVE-2024-45013 9.8 CRITICAL nvme: move stopping keep-alive into nvme_uninit_ctrl()
CVE-2024-45009 8.2 HIGH mptcp: pm: only decrement add_addr_accepted for MPJ req
CVE-2024-45019 7.8 HIGH net/mlx5e: Take state lock during tx timeout reporter
CVE-2024-45016 7.8 HIGH netem: fix return value if duplicate enqueue fails
CVE-2024-45017 7.8 HIGH net/mlx5: Fix IPsec RoCE MPV trace call
CVE-2024-45020 7.8 HIGH bpf: Fix a kernel verifier crash in stacksafe()
CVE-2024-45023 7.8 HIGH md/raid1: Fix data corruption for degraded array with slow disk
CVE-2024-45022 7.8 HIGH mm/vmalloc: fix page mapping if vm_area_alloc_pages() with high order fallback to order 0
CVE-2024-45021 7.1 HIGH memcg_write_event_control(): fix a user-triggerable oops
CVE-2024-45026 7.0 HIGH s390/dasd: fix error recovery leading to data corruption on ESE devices
CVE-2024-46672 wifi: brcmfmac: cfg80211: Handle SSID based pmksa deletion
CVE-2024-45025 fix bitmap corruption on close_range() with CLOSE_RANGE_UNSHARE
CVE-2024-45018 netfilter: flowtable: initialise extack before use
CVE-2024-45027 usb: xhci: Check for xhci->interrupters being allocated in xhci_mem_clearup()
CVE-2024-45014 s390/boot: Avoid possible physmem_info segment corruption
CVE-2024-45015 drm/msm/dpu: move dpu_encoder's connector assignment to atomic_enable()
CVE-2024-45012 nouveau/firmware: use dma non-coherent allocator
CVE-2024-45029 i2c: tegra: Do not mark ACPI devices as irq safe
CVE-2024-45011 char: xillybus: Check USB endpoints when probing device

Showing top 20 of 23 CVEs. View all on vendor page &rarr; →

IV. Related Vulnerabilities

V. Comments for CVE-2024-45024

No comments yet


Leave a comment