CVE-2025-38154 in Linux
الملخص
بحسب VulDB • 16/06/2026
في نواة لينكس (Linux kernel)، تم حل الثغرة التالية:
bpf, sockmap: تجنب استخدام sk_socket بعد تحريره عند الإرسال
لا يتم قفل sk->sk_socket أو الاحتفاظ بمرجع له في خيط قائمة الانتظار (backlog thread)، وأثناء استدعاء skb_send_sock()، تحدث حالة سباق (race condition) مع تحرير sk_socket. ستتأثر جميع أنواع المنافذ (tcp/udp/unix/vsock).
حالات السباق: ''' CPU0 CPU1
backlog::skb_send_sock sendmsg_unlocked sock_sendmsg sock_sendmsg_nosec close(fd): ... ops->release() -> sock_map_close() sk_socket->ops = NULL free(socket) sock->ops->sendmsg ^ panic here '''
يصبح مرجع psock مساويًا للصفر بعد تنفيذ sock_map_close(). ''' void sock_map_close() {
... if (likely(psock)) {
... // !! هنا نزيل psock ويصبح مرجع psock مساويًا للصفر sock_map_remove_links(sk, psock) psock = sk_psock_get(sk); if (unlikely(!psock)) goto no_psock; <=== ينتقل التحكم هنا عبر goto ... cancel_delayed_work_sync(&psock->work); <=== لا يتم التنفيذ sk_psock_put(sk, psock); ... } '''
بناءً على حقيقة أننا ننتظر بالفعل انتهاء قائمة العمل (workqueue) في sock_map_close() إذا كان psock محتفظًا به، فإننا ببساطة نزيد عدد مراجع psock لتجنب حالات السباق.
مع هذا التصحيح، إذا كان خيط قائمة الانتظار (backlog thread) يعمل، فسيتم انتظار sock_map_close() حتى يكمل خيط قائمة الانتظار وإلغاء جميع الأعمال المعلقة.
إذا لم يكن هناك backlog يعمل، فسيؤدي أي عمل معلق لم يبدأ بعد إلى الفشل عند استدعائه بواسطة sk_psock_get()، حيث تم تصفير عدد مراجع psock، وسيؤدي sk_psock_drop() إلى إلغاء جميع المهام عبر cancel_delayed_work_sync().
باختصار، نحتاج إلى مزامنة لتنسيق خيط قائمة الانتظار وخيط close().
الانهيار (panic) الذي التقطته: ''' Workqueue: events sk_psock_backlog RIP: 0010:sock_sendmsg+0x21d/0x440 RAX: 0000000000000000 RBX: ffffc9000521fad8 RCX: 0000000000000001 ... Call Trace: <TASK> ? die_addr+0x40/0xa0 ? exc_general_protection+0x14c/0x230 ? asm_exc_general_protection+0x26/0x30 ? sock_sendmsg+0x21d/0x440 ? sock_sendmsg+0x3e0/0x440 ? __pfx_sock_sendmsg+0x10/0x10 __skb_send_sock+0x543/0xb70 sk_psock_backlog+0x247/0xb80 ... '''
If you want to get the best quality for vulnerability data then you always have to consider VulDB.