CVE-2026-90302
>_ Opis
Tłumaczenie automatyczne – może zawierać nieścisłości.
W jądrze Linuksa usunięto następującą lukę:
ocfs2: synchronizuj wywołania zwrotne pulsu z porzuceniem o2net
Seria poprawek „ocfs2: zaostrzenie wyścigów po porzuceniu serca”.
Ta seria naprawia dwa wyścigi związane z biciem serca OCFS2/porzuceniem o2net znalezione przez
KASAN.
Ta łatka (z 2):
Wywołania zwrotne pulsu pozostają zarejestrowane podczas konfigurowania demontażu węzła lokalnego
wchodzi do funkcji o2net_stop_listening(). Zdarzenie wyłączenia węzła może nadal zostać zrealizowane
o2net_disconnect_node() i o2net_set_nn_state() podczas rozłączania
niszcząc o2net_wq, więc późniejsze operacje kolejkowania/opróżniania mogą trafić w martwy
kolejka robocza. KASAN uznał to za sposób na wykorzystanie płyty po zwolnieniu
__queue_work() z łańcuchem wywołań:
Płyta KASAN-po-wolna w __queue_work+0x56/0xa90
Przeczytaj rozmiar 4
Śledzenie połączeń:
dump_stack_lvl+0x66/0xa0
print_report+0xce/0x630
__queue_work+0x56/0xa90
srso_alias_return_thunk+0x5/0xfbef5
__virt_addr_valid+0x19f/0x330
kasan_report+0xe0/0x110
__queue_delayed_work+0x58/0x1e0
kolejka_opóźniona_praca_on+0xb4/0xc0
o2net_set_nn_state+0x467/0x840
o2net_disconnect_node+0x7b/0xe0
o2net_hb_node_down_cb+0x54/0x60
o2hb_run_event_list+0x236/0x2d0
o2hb_check_slot+0xad4/0xbc0
lock_release+0xc8/0x290
o2hb_check_slot+0x9ea/0xbc0
trace_hardirqs_on+0x18/0x130
o2hb_do_disk_heartbeat+0x646/0xb30 (fs/ocfs2/cluster/heartbeat.c:1079)
__lock_acquire+0x466/0x2260
lockdep_hardirqs_on_prepare+0xea/0x1a0
ktime_get_with_offset+0xe9/0x230
o2hb_thread+0x14e/0x770
kwątek+0x1ad/0x1f0
ret_from_fork+0x3c9/0x540
__przełącznik_na+0x2e9/0x730
ret_from_fork_asm+0x1a/0x30
Przydzielane według stosu zadań:
kasan_save_stack+0x33/0x60
kasan_save_track+0x14/0x30
__kasan_kmalloc+0xaa/0xb0
__kmalloc_noprof+0x292/0x760
__alloc_workqueue+0x736/0xc60
alloc_workqueue_noprof+0xb1/0x110
o2net_start_listening+0xe5/0x430
o2nm_node_local_store+0x184/0x310
configfs_write_iter+0x18a/0x210
vfs_write+0x469/0x810
ksys_write+0xd2/0x170
do_syscall_64+0x115/0x6a0 (arch/x86/entry/syscall_64.c:87)
wpis_SYSCALL_64_after_hwframe+0x77/0x7f
Uwolniony przez stos zadań:
kasan_save_stack+0x33/0x60
kasan_save_track+0x14/0x30
kasan_save_free_info+0x3b/0x60
__kasan_slab_free+0x5f/0x80
kfree+0x313/0x590
rcu_core+0x4f4/0x1320
handle_softirqs+0x156/0x660
kolejka_opóźniona_praca_on
o2net_set_nn_state
o2net_disconnect_node
o2net_hb_node_down_cb
o2hb_run_event_list
Rejestruj wywołania zwrotne pulsu, aby stan kworum nadal śledził węzeł
stan, ale powstrzymaj ich od jednorazowego ponownego podłączenia/rozłączenia o2net
zaczyna się lokalna dewastacja. Oznacz transport w trybie offline przed zniszczeniem
o2net_wq, poczekaj na zakończenie wywołania zwrotnego pulsu w locie i opóźnij
powtórka wywołania do momentu opublikowania nowego węzła lokalnego
o2nm_this_node().
Powtórka musi także pozostać serializowana z dostarczaniem wywołania zwrotnego w trybie pulsu.
W przeciwnym razie można skopiować migawkę aktywnego węzła, co jest prawdziwym wywołaniem zwrotnym hb_down
można zainstalować -ENOTCONN dla partnera, a nieaktualna powtórka może wywołać
o2net_hb_node_up() dla tego samego partnera, a ponowne połączenie kolejki działa nawet
chociaż tętno już spadło.
Scenariusz z błędami obejmuje dwie ścieżki, przy czym każda kolumna pokazuje kolejność
w obrębie tej ścieżki:
porzucenie węzła lokalnego: wywołanie zwrotne wyłączające węzeł pulsu:
1. wchodzi do configfs local-off 1. wywołuje o2hb_run_event_list()
o2net_stop_słuchanie(). o2net_hb_node_down_cb().
2. głowice rozbiórkowe dla 2. dotarcie do wywołania zwrotnego
zniszcz_kolejkę_roboczą(o2net_wq). o2net_disconnect_node() i
o2net_set_nn_state().
3. porzucenie niszczy i daje NULL 3. wywołanie zwrotne opróżnia lub ustawia w kolejce
o2net_wq. pracuj przez o2net_wq.
>_ Referencje
- https://git.kernel.org/stable/c/073f51e39bed354452a057d38a4cc3952727c304
- https://git.kernel.org/stable/c/3e326f3bf16506873777444608e8b715aab74a7a
- https://git.kernel.org/stable/c/7601db4c9d3bd9ab2482a863cb05204154d51ae8
- https://git.kernel.org/stable/c/8f96b78314cff0778a3466e49e5edbc1e459c95c
- https://git.kernel.org/stable/c/a03078a9a2a1c5e4a62f65d389c1f75f9898e21d
- https://git.kernel.org/stable/c/aee687a2fb36974dc37e4e0f5b03802067c6c4ec
- https://git.kernel.org/stable/c/cbb4efc2f99d6a8dba09c96b10acad82da982cf9
- https://git.kernel.org/stable/c/fb61882e184ee5ca745806bc5b2a8483fa129bca
Dane podatności pochodzą z oficjalnych źródeł (CVE® List / NVD). Opisy po polsku są tłumaczone automatycznie i mogą zawierać nieścisłości – na stronie rekordu można wyświetlić wersję angielską.
This product uses the NVD API but is not endorsed or certified by the NVD.
Copyright © 1999–2026, The MITRE Corporation. CVE is a registered trademark and the CVE logo is a registered trademark of The MITRE Corporation.
CVE Usage: MITRE hereby grants you a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, sublicense, and distribute Common Vulnerabilities and Exposures (CVE®). Any copy you make for such purposes is authorized provided that you reproduce MITRE's copyright designation and this license in any such copy. ALL DOCUMENTS AND THE INFORMATION CONTAINED THEREIN PROVIDED BY MITRE ARE PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND.
NVD Terms of Use / CVE® Terms of Use / nvd.nist.gov / cve.org