CVE-2024-50106 in Linux
Tóm tắt
Bởi VulDB • 26/05/2026
Trong kernel Linux, lỗ hổng sau đây đã được khắc phục:
nfsd: sửa lỗi race condition giữa laundromat và free_stateid
Có một race condition giữa việc xử lý các delegation bị thu hồi bởi laundromat và một client gửi thao tác free_stateid. Thread laundromat phát hiện rằng delegation đã hết hạn và cần bị thu hồi, do đó nó đánh dấu stid của delegation là revoked (bị thu hồi) và đưa nó vào danh sách reaper, nhưng sau đó nó giải phóng state lock và việc thu hồi delegation thực tế diễn ra mà không có lock. Một khi stid được đánh dấu là revoked, một thread xử lý free_stateid cạnh tranh sẽ thực hiện các thao tác sau: (1) gọi list_del_init() để loại bỏ nó khỏi danh sách reaper và (2) giải phóng cấu trúc delegation stid. Thread laundromat cuối cùng không gọi hàm revoke_delegation() cho delegation cụ thể này, nhưng điều đó có nghĩa là nó sẽ không giải phóng lease (thỏa thuận) tồn tại trên file.
Sau đó, một lệnh mở (open) mới cho file này được thực hiện và phát hiện thấy danh sách lease không rỗng, dẫn đến việc gọi nfsd_breaker_owns_lease(), hàm này cố gắng dereference một delegation stateid đã bị giải phóng. Điều này dẫn đến cảnh báo KASAN use-after-free sau đây:
kernel: ================================================================== kernel: BUG: KASAN: slab-use-after-free in nfsd_breaker_owns_lease+0x140/0x160 [nfsd]
kernel: Read of size 8 at addr ffff0000e73cd0c8 by task nfsd/6205 kernel: kernel: CPU: 2 UID: 0 PID: 6205 Comm: nfsd Kdump: loaded Not tainted 6.11.0-rc7+ #9 kernel: Hardware name: Apple Inc. Apple Virtualization Generic Platform, BIOS 2069.0.0.0.0 08/03/2024 kernel: Call trace: kernel: dump_backtrace+0x98/0x120 kernel: show_stack+0x1c/0x28 kernel: dump_stack_lvl+0x74/0xb0 kernel: print_address_description.constprop.0+0x30/0x38 kernel: kasan_report+0x90/0x100 kernel: nfsd_breaker_owns_lease+0x140/0x160 [nfsd]
kernel: nfsd_break_oldest_lease+0x100/0x140 [nfsd]
kernel: nfsd_break_delegations+0x100/0x140 [nfsd]
kernel: nfsd_open+0x100/0x140 [nfsd]
kernel: nfsd3_proc_open+0x100/0x140 [nfsd]
kernel: nfsd_dispatch+0x100/0x140 [nfsd]
kernel: svc_process_common+0x100/0x140 [sunrpc]
kernel: svc_process+0x100/0x140 [sunrpc]
kernel: svc_handle_xprt+0x100/0x140 [sunrpc]
kernel: svc_recv+0x100/0x140 [sunrpc]
kernel: nfsd+0x100/0x140 [nfsd]
kernel: kthread+0x100/0x140 kernel: ret_from_fork+0x10/0x20 kernel: kernel: Allocated by task nfsd/6205: kernel: kasan_save_stack+0x30/0x50 kernel: kasan_set_track+0x20/0x40 kernel: kasan_set_alloc_info+0x20/0x40 kernel: __kasan_kmalloc+0x60/0x80 kernel: kmem_cache_alloc+0x100/0x140 kernel: nfsd4_alloc_stateid+0x100/0x140 [nfsd]
kernel: nfsd4_create_stateid+0x100/0x140 [nfsd]
kernel: nfsd4_open+0x100/0x140 [nfsd]
kernel: nfsd3_proc_open+0x100/0x140 [nfsd]
kernel: nfsd_dispatch+0x100/0x140 [nfsd]
kernel: svc_process_common+0x100/0x140 [sunrpc]
kernel: svc_process+0x100/0x140 [sunrpc]
kernel: svc_handle_xprt+0x100/0x140 [sunrpc]
kernel: svc_recv+0x100/0x140 [sunrpc]
kernel: nfsd+0x100/0x140 [nfsd]
kernel: kthread+0x100/0x140 kernel: ret_from_fork+0x10/0x20 kernel: kernel: Freed by task nfsd/6205: kernel: kasan_save_stack+0x30/0x50 kernel: kasan_set_track+0x20/0x40 kernel: kasan_set_free_info+0x20/0x40 kernel: __kasan_slab_free+0x60/0x80 kernel: slab_free_hook+0x100/0x140 kernel: slab_free_freelist_hook+0x100/0x140 kernel: slab_free+0x100/0x140 kernel: kmem_cache_free+0x100/0x140 kernel: nfsd4_free_stateid+0x100/0x140 [nfsd]
kernel: nfsd3_proc_open+0x100/0x140 [nfsd]
kernel: nfsd_dispatch+0x100/0x140 [nfsd]
kernel: svc_process_common+0x100/0x140 [sunrpc]
kernel: svc_process+0x100/0x140 [sunrpc]
kernel: svc_handle_xprt+0x100/0x1
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.