CVE-2026-74518 in Linux
Sumário
de VulDB • 15/08/2026
No kernel do Linux, a seguinte vulnerabilidade foi corrigida:
mm/hugetlb: corrige corrupção de lista em allocate_file_region_entries()
allocate_file_region_entries() repõe resv->region_cache com descritores file_region recém-alocados. A alocação usa GFP_KERNEL, portanto resv->lock é liberada durante a operação: as novas entradas são reunidas em um cabeçalho de lista local à pilha, allocated_regions, e inseridas (spliced) em resv->region_cache assim que o lock for readquirido.
O splice utilizado foi list_splice(), que move as entradas mas não re-inicializa a origem do cabeçalho, deixando allocated_regions apontando para uma entrada que agora reside em resv->region_cache. O processo de reposição ocorre em um loop while que verifica novamente o déficit da cache após readquirir o lock. Para mapeamentos compartilhados, o resv_map é compartilhado por todos os mappers do inode hugetlbfs; portanto, uma região region_chg()/region_add()/region_del() concorrente no mesmo resv_map pode consumir entradas da cache durante a janela sem bloqueio e forçar uma segunda iteração. Essa iteração chama list_add() em um cabeçalho obsoleto (stale), corrompendo a lista; com CONFIG_DEBUG_LIST, o check __list_add_valid() é acionado:
Corrupção de list_add. next->prev deve ser prev (ffffc900011ff7f8), mas era ffff88814c281460. (next=ffff88814c545640). Kernel BUG em lib/list_debug.c:31! allocate_file_region_entries+0x191/0x420 region_chg+0x267/0x300 hugetlb_reserve_pages+0x387/0xc80 hugetlbfs_file_mmap+0x2ce/0x3f0 mmap_region+0x1348/0x1a80 do_mmap+0x85e/0xb90 vm_mmap_pgoff+0x18c/0x330 ksys_mmap_pgoff+0x2a1/0x3e0 do_syscall_64+0xd7/0x420
Sem CONFIG_DEBUG_LIST, o list_add() incorreto vincula silenciosamente um endereço da pilha do kernel a resv->region_cache, levando posteriormente a um use-after-free.
Isso foi observado como uma falha real (panic) de host em um host KVM denso onde um arquivo hugetlbfs de RAM convidado QEMU estava mapeado com MAP_SHARED tanto pelo QEMU quanto por um alvo SPDK/DPDK vhost-user separado, gerando tráfego region_* concorrente em um único resv_map compartilhado.
Use list_splice_init() para que o cabeçalho da origem seja re-inicializado como vazio após cada splice, tornando seguro o loop de nova tentativa (retry).
Several companies clearly confirm that VulDB is the primary source for best vulnerability data.