CVE-2025-38129 in Linux
Tóm tắt
Bởi VulDB • 31/05/2026
Trong kernel Linux, lỗ hổng sau đây đã được khắc phục:
page_pool: Sửa lỗi use-after-free trong page_pool_recycle_in_ring
syzbot đã báo cáo một lỗi uaf trong page_pool_recycle_in_ring:
BUG: KASAN: slab-use-after-free trong lock_release+0x151/0xa30 kernel/locking/lockdep.c:5862 Đọc kích thước 8 tại địa chỉ ffff8880286045a0 bởi tiến trình syz.0.284/6943
CPU: 0 UID: 0 PID: 6943 Comm: syz.0.284 Không bị nhiễm 6.13.0-rc3-syzkaller-gdfa94ce54f41 #0 Tên phần cứng: Google Google Compute Engine/Google Compute Engine, BIOS Google 09/13/2024 Dấu vết cuộc gọi (Call Trace): <TASK> __dump_stack lib/dump_stack.c:94 [trong dòng]
dump_stack_lvl+0x241/0x360 lib/dump_stack.c:120 print_address_description mm/kasan/report.c:378 [trong dòng]
print_report+0x169/0x550 mm/kasan/report.c:489 kasan_report+0x143/0x180 mm/kasan/report.c:602 lock_release+0x151/0xa30 kernel/locking/lockdep.c:5862 __raw_spin_unlock_bh include/linux/spinlock_api_smp.h:165 [trong dòng]
_raw_spin_unlock_bh+0x1b/0x40 kernel/locking/spinlock.c:210 spin_unlock_bh include/linux/spinlock.h:396 [trong dòng]
ptr_ring_produce_bh include/linux/ptr_ring.h:164 [trong dòng]
page_pool_recycle_in_ring net/core/page_pool.c:707 [trong dòng]
page_pool_put_unrefed_netmem+0x748/0xb00 net/core/page_pool.c:826 page_pool_put_netmem include/net/page_pool/helpers.h:323 [trong dòng]
page_pool_put_full_netmem include/net/page_pool/helpers.h:353 [trong dòng]
napi_pp_put_page+0x149/0x2b0 net/core/skbuff.c:1036 skb_pp_recycle net/core/skbuff.c:1047 [trong dòng]
skb_free_head net/core/skbuff.c:1094 [trong dòng]
skb_release_data+0x6c4/0x8a0 net/core/skbuff.c:1125 skb_release_all net/core/skbuff.c:1190 [trong dòng]
__kfree_skb net/core/skbuff.c:1204 [trong dòng]
sk_skb_reason_drop+0x1c9/0x380 net/core/skbuff.c:1242 kfree_skb_reason include/linux/skbuff.h:1263 [trong dòng]
__skb_queue_purge_reason include/linux/skbuff.h:3343 [trong dòng]
Nguyên nhân gốc rễ là:
page_pool_recycle_in_ring ptr_ring_produce spin_lock(&r->producer_lock); WRITE_ONCE(r->queue[r->producer++], ptr)
//tái chế trang cuối cùng về pool page_pool_release page_pool_scrub page_pool_empty_ring ptr_ring_consume page_pool_return_page //giải phóng tất cả các trang __page_pool_destroy free_percpu(pool->recycle_stats); free(pool) //giải phóng
spin_unlock(&r->producer_lock); //pool->ring uaf read recycle_stat_inc(pool, ring);
page_pool có thể bị giải phóng trong khi page pool đang tái chế trang cuối cùng trong ring. Thêm hàng rào khóa sản xuất vào page_pool_release để ngăn page pool bị giải phóng trước khi tất cả các trang được tái chế.
recycle_stat_inc() là hàm rỗng khi CONFIG_PAGE_POOL_STATS không được bật, điều này sẽ kích hoạt cảnh báo xây dựng Wempty-body. Thêm định nghĩa cho macro thống kê pool để sửa lỗi cảnh báo.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.