CVE-2026-89496
NieznaneStreszczenie
W jądrze Linux w systemie plików ocfs2 występuje wyciek pamięci podczas operacji copy-on-write wywoływanych przez copy_file_range() w obrębie tego samego systemu plików. Problem został wykryty przez fuzzing i polega na tym, że zwalnianie bloków (deallocs) nie jest zawsze uruchamiane po zakończeniu copy-on-write, co prowadzi do nieodwołanych alokacji pamięci.
Ocena ryzyka
Wyciek pamięci może prowadzić do stopniowego wyczerpywania zasobów jądra i w konsekwencji do niestabilności lub awarii systemu na maszynach używających systemu plików ocfs2. W środowiskach wielokrotnego użytku może to zostać wykorzystane do przeprowadzenia ataku typu denial of service.
Rekomendacja
Zaktualizuj jądro Linux do wersji zawierającej poprawkę dla CVE-2026-89496. Jeśli aktualizacja nie jest możliwa, rozważ ograniczenie użycia systemu plików ocfs2 lub monitorowanie zużycia pamięci jądra.
Inne podatności w Linux kernel (ocfs2)
Zobacz wszystkie- CVE-2026-89494Nieznane
W jądrze Linux w module ocfs2 funkcja dlm_mig_lockres_handler ufała polom num_locks i lockname_len z wiadomości DLM_MIG_LOCKRES bez ich walidacji. Prowadziło to do odczytu poza granicami bufora (panic BUG_ON) oraz zapisu poza granicami sterty przy kopiowaniu nazwy blokady do 32-bajtowego obiektu. Podatność może wykorzystać dowolny węzeł w domenie.
- CVE-2026-89493Nieznane
W jądrze Linux w module ocfs2 brakowało walidacji pól rl_used i rl_count w bloku refcount. Złośliwy lub uszkodzony obraz ocfs2 z rl_used ustawionym na 0xffff powoduje odczyt poza zakresem bloku metadanych, a następnie memmove poza bufor podczas operacji reflink (FICLONE). Podatność wymaga lokalnego dostępu (CAP_SYS_ADMIN przy montowaniu obrazu lub zapis do urządzenia blokowego).
- CVE-2026-89492Nieznane
W jądrze Linux w module ocfs2 wykryto lukę polegającą na braku walidacji liczby wpisów w indeksie katalogu podczas odczytu metadanych. Funkcje ocfs2_validate_dx_leaf() i ocfs2_validate_dx_root() nie sprawdzają, czy pola de_num_used i de_count mieszczą się w pojemności bloku, co pozwala spreparowanemu obrazowi dysku ustawić je na 0xffff i doprowadzić do odczytu poza granicami bloku metadanych 4KB. Luka jest osiągalna przy każdej operacji wyszukiwania ścieżki, stat() lub open() na zaindeksowanym katalogu po zamontowaniu obrazu.
- CVE-2026-89490Nieznane
W jądrze Linux w module ocfs2 funkcja ocfs2_dir_foreach_blk_el() na 32-bitowych jądrach błędnie obliczała maskę pozycji katalogu, co powodowało wyzerowanie górnych 32 bitów pozycji. Przy przekroczeniu granicy 4 GiB podczas readdir() pozycja była resetowana, co prowadziło do nieskończonego ponownego wyliczania tych samych wpisów katalogu.
Oryginalny opis (angielski, źródło NVD)
In the Linux kernel, the following vulnerability has been resolved: ocfs2: always run deallocs on copy-on-write completion Local fuzzing of 6.12.94 has found the following memory leak caused by doing 'copy_file_range()' within the same filesystem: unreferenced object 0xffff88812192c980 (size 32): comm "syz.0.49", pid 12095, jiffies 4294964143 hex dump (first 32 bytes): 00 00 00 00 00 00 00 00 08 00 00 00 00 00 00 00 ................ c0 c5 92 21 81 88 ff ff 00 02 00 00 00 06 00 00 ...!............ backtrace (crc 7068d63f): kmemleak_alloc_recursive include/linux/kmemleak.h:42 [inline] slab_post_alloc_hook mm/slub.c:4152 [inline] slab_alloc_node mm/slub.c:4197 [inline] __kmalloc_cache_noprof+0x168/0x2c0 mm/slub.c:4358 kmalloc_noprof include/linux/slab.h:878 [inline] ocfs2_find_per_slot_free_list fs/ocfs2/alloc.c:6618 [inline] ocfs2_cache_block_dealloc+0x155/0x4b0 fs/ocfs2/alloc.c:6786 ocfs2_cache_extent_block_free fs/ocfs2/alloc.c:6819 [inline] ocfs2_unlink_path+0x286/0x450 fs/ocfs2/alloc.c:2613 ocfs2_rotate_subtree_left fs/ocfs2/alloc.c:2779 [inline] __ocfs2_rotate_tree_left+0x1f6f/0x2da0 fs/ocfs2/alloc.c:2985 ocfs2_rotate_tree_left+0x283/0xe00 fs/ocfs2/alloc.c:3237 ocfs2_try_to_merge_extent+0xf56/0x1a20 fs/ocfs2/alloc.c:3825 ocfs2_split_extent+0x15f4/0x2940 fs/ocfs2/alloc.c:5138 ocfs2_clear_ext_refcount+0x2f6/0x550 fs/ocfs2/refcounttree.c:3098 ocfs2_replace_clusters fs/ocfs2/refcounttree.c:3131 [inline] ocfs2_make_clusters_writable fs/ocfs2/refcounttree.c:3255 [inline] ocfs2_replace_cow+0x991/0x1660 fs/ocfs2/refcounttree.c:3349 ocfs2_refcount_cow_hunk fs/ocfs2/refcounttree.c:3427 [inline] ocfs2_refcount_cow+0x5e1/0x9f0 fs/ocfs2/refcounttree.c:3470 ocfs2_prepare_inode_for_write fs/ocfs2/file.c:2340 [inline] ocfs2_file_write_iter+0xbda/0x1880 fs/ocfs2/file.c:2451 iter_file_splice_write+0x890/0xf60 fs/splice.c:743 do_splice_from fs/splice.c:944 [inline] direct_splice_actor+0x232/0x480 fs/splice.c:1167 splice_direct_to_actor+0x4b4/0xb60 fs/splice.c:1111 do_splice_direct_actor fs/splice.c:1210 [inline] do_splice_direct+0x10f/0x1c0 fs/splice.c:1236 do_sendfile+0x430/0xbf0 fs/read_write.c:1388 unreferenced object 0xffff88812192c5c0 (size 32): comm "syz.0.49", pid 12095, jiffies 4294964143 hex dump (first 32 bytes): 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 29 70 00 00 00 00 00 00 19 00 00 00 00 00 00 00 )p.............. backtrace (crc afec850f): kmemleak_alloc_recursive include/linux/kmemleak.h:42 [inline] slab_post_alloc_hook mm/slub.c:4152 [inline] slab_alloc_node mm/slub.c:4197 [inline] __kmalloc_cache_noprof+0x168/0x2c0 mm/slub.c:4358 kmalloc_noprof include/linux/slab.h:878 [inline] kzalloc_noprof include/linux/slab.h:1014 [inline] ocfs2_cache_block_dealloc+0x25c/0x4b0 fs/ocfs2/alloc.c:6793 ocfs2_cache_extent_block_free fs/ocfs2/alloc.c:6819 [inline] ocfs2_unlink_path+0x286/0x450 fs/ocfs2/alloc.c:2613 ocfs2_rotate_subtree_left fs/ocfs2/alloc.c:2779 [inline] __ocfs2_rotate_tree_left+0x1f6f/0x2da0 fs/ocfs2/alloc.c:2985 ocfs2_rotate_tree_left+0x283/0xe00 fs/ocfs2/alloc.c:3237 ocfs2_try_to_merge_extent+0xf56/0x1a20 fs/ocfs2/alloc.c:3825 ocfs2_split_extent+0x15f4/0x2940 fs/ocfs2/alloc.c:5138 ocfs2_clear_ext_refcount+0x2f6/0x550 fs/ocfs2/refcounttree.c:3098 ocfs2_replace_clusters fs/ocfs2/refcounttree.c:3131 [inline] ocfs2_make_clusters_writable fs/ocfs2/refcounttree.c:3255 [inline] ocfs2_replace_cow+0x991/0x1660 fs/ocfs2/refcounttree.c:3349 ocfs2_refcount_cow_hunk fs/ocfs2/refcounttree.c:3427 [inline] ocfs2_refcount_cow+0x5e1/0x9f0 fs/ocfs2/refcounttree.c:3470 ocfs2_prepare_inode_for_write fs/ocfs2/file.c:2340 [inline] ocfs2_file_write_iter+0xbda/0x1880 fs/ocfs2/file.c:2451 iter_file_splice_write+0x890/0xf60 fs/splice.c:743 do_splice_from fs/splice.c:9 ---truncated---

