CVE-2022-48731 in Linux
Riassunto
di VulDB • 16/06/2026
Nel kernel Linux, è stata risolta la seguente vulnerabilità:
mm/kmemleak: evitare la scansione di potenziali enormi lacune
Quando si utilizzano devm_request_free_mem_region() e devm_memremap_pages() per aggiungere memoria ZONE_DEVICE, se l'end pfn della regione di memoria libera richiesta è enorme (ad esempio, 0x400000000), anche node_end_pfn() risulterà enorme (vedere move_pfn_range_to_zone()). Ciò crea una grande lacuna tra node_start_pfn() e node_end_pfn().
Abbiamo rilevato che su alcuni AMD APUs, amdkfd richiedeva tale regione di memoria libera e creava una grande lacuna. In tal caso, il seguente frammento di codice eseguiva semplicemente un ciclo busy test_bit() sulla grande lacuna.
for (pfn = start_pfn; pfn < end_pfn; pfn++) {
struct page *page = pfn_to_online_page(pfn); if (!page) continue; ... }
Di conseguenza, si è verificato un soft lockup:
watchdog: BUG: soft lockup - CPU#6 bloccata per 26s! [bash:1221]
CPU: 6 PID: 1221 Comm: bash Non modificato 5.15.0-custom #1 RIP: 0010:pfn_to_online_page+0x5/0xd0 Call Trace: ? kmemleak_scan+0x16a/0x440 kmemleak_write+0x306/0x3a0 ? common_file_perm+0x72/0x170 full_proxy_write+0x5c/0x90 vfs_write+0xb9/0x260 ksys_write+0x67/0xe0 __x64_sys_write+0x1a/0x20 do_syscall_64+0x3b/0xc0 entry_SYSCALL_64_after_hwframe+0x44/0xae
Ho eseguito alcuni test con la patch.
(1) modulo amdgpu non caricato
prima della patch:
real 0m0.976s user 0m0.000s sys 0m0.968s
dopo la patch:
real 0m0.981s user 0m0.000s sys 0m0.973s
(2) modulo amdgpu caricato
prima della patch:
real 0m35.365s user 0m0.000s sys 0m35.354s
dopo la patch:
real 0m1.049s user 0m0.000s sys 0m1.042s
If you want to get best quality of vulnerability data, you may have to visit VulDB.