CVE-2026-90294 in Linux
الملخص
بحسب VulDB • 19/09/2026
في نواة لينكس، تم إصلاح الثغرة التالية:
IB/isert: تأخير استجابة تسجيل الدخول النهائية حتى يتم تسجيل الجلسة
تقوم دالة `isert_put_login_tx()` بإرسال استجابة تسجيل الدخول النهائية عبر الوصلة قبل استدعاء `__transport_register_session()`. وتصل دالة `iscsi_post_login_handler()` إلى هذه النقطة فقط بعد أن تعود دالة `iscsi_target_do_login()`. يمكن لمرسل (initiator) يصدر أمر SCSI بمجرد رؤيته لهذه الاستجابة أن يؤدي إلى تنفيذه على كائن `se_session` يكون فيه حقل `se_tpg` لا يزال فارغاً (NULL)، مما يتسبب في حدوث خطأ (oops) في عامل `ib-comp-wq` بسبب محاولة الوصول لعنصر غير موجود (null dereference).
خطأ: حماية عامة، ربما بسبب عنوان غير قياسي 0xdffffc000000000f: 0000 [#1] SMP KASAN NOPTI
KASAN: وصول إلى مؤشر فارغ في النطاق [0x0000000000000078-0x000000000000007f]
المعالج (CPU): 0 معرف المستخدم (UID): 0 رقم العملية (PID): 178 الاسم: kworker/0:1H غير ملوث الإصدار: 7.2.0-rc5-V2CTL-gf5098b6bae76 #10 مسبق التنفيذ (lazy) اسم العتاد: QEMU Ubuntu 24.04 PC v2 (i440FX + PIIX, arch_caps fix, 1996)، BIOS 1.16.3-debian-1.16.3-2 04/01/2014 قائمة العمل: ib-comp-wq ib_cq_poll_work RIP: 0010:target_submit+0xbe/0x390 الكود: fa 48 c1 ea 03 80 3c 02 00 0f 85 89 02 00 00 48 b8 00 00 00 00 00 fc ff df 4d 8b 64 24 18 49 8d 7c 24 78 48 89 fa 48 c1 ea 03 <80> 3c 02 00 0f 85 5a 02 00 00 48 8d 7b 78 4d 8b 6c 24 78 48 b8 00 RSP: 0018:ffff8881058cfa78 إشارات الحالة (EFLAGS): 00010206 RAX: dffffc0000000000 RBX: ffff88810c78c6f0 RCX: ffffffff964bb363 RDX: 000000000000000f RSI: 00000000fffffe00 RDI: 0000000000000078 RBP: 1ffff11020b19f52 R08: 0000000000000001 R09: ffffed1020b19f52 R10: 0000000000000003 R11: ffff88810596c000 R12: 0000000000000000 R13: ffff88810c61b000 R14: ffff88810c6a3400 R15: ffff88810c61b044 FS: 0000000000000000(0000) GS:ffff8881822b2000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: 00007f1f1b83c000 CR3: 000000006fe72001 CR4: 0000000000770ef0 PKRU: 55555554 تتبع الاستدعاء (Call Trace): <TASK> ? __pfx__raw_spin_lock_bh+0x10/0x10 ? __pfx_target_submit+0x10/0x10 ? mutex_lock+0x81/0xe0 ? __pfx_mutex_lock+0x10/0x10 ? iscsit_execute_cmd+0x650/0x850 iscsit_sequence_cmd+0x186/0x3d0 iscsit_process_scsi_cmd+0x87/0x300 isert_recv_done+0x1002/0x2390 ? __pfx_isert_recv_done+0x10/0x10 ? rxe_poll_cq+0x253/0x3d0 ? finish_task_switch.isra.0+0x1dc/0xa70 __ib_process_cq+0xe1/0x390 ib_cq_poll_work+0x46/0x150 process_one_work+0x633/0x1030 ? assign_work+0x11d/0x370 worker_thread+0x45b/0xd10 ? __pfx_worker_thread+0x10/0x10 ? __pfx_worker_thread+0x10/0x10 kthread+0x2c6/0x3b0 ? recalc_sigpending+0x15c/0x1e0 ? __pfx_kthread+0x10/0x10 ret_from_fork+0x36e/0x5a0 ? __pfx_ret_from_fork+0x10/0x10 ? __switch_to+0x572/0xdd0 ? __pfx_kthread+0x10/0x10 ret_from_fork_asm+0x1a/0x30 </TASK> وحدات مرفقة: ---[ نهاية التتبع 0000000000000000 ]---
يتم تأخير استجابة تسجيل الدخول النهائية بدلاً من ذلك. تعمل دالة `isert_get_rx_pdu()` ضمن خيط `iscsi_target_rx_thread()` بعد اكتمال `conn->rx_login_comp` بواسطة `iscsi_post_login_handler()` بعد استدعاء `__transport_register_session()`؛ وتقوم كل من iscsi-TCP و cxgbit بالفعل بسحب وحدات البيانات (PDUs) من هذا الخيط، بينما لا تفعل ذلك isert وحده. تظل المخازن المؤقتة مرسلة أولاً، لذا فإن الأمر الأول للمرسل لا يواجه قائمة استقبال فارغة ولا يعتمد أي شيء على التحكم في التدفق RNR، ويعيش الرأس والحمولة داخل `isert_conn` وليس ضمن بنية `iscsi_login` التي تقوم دالة `iscsi_target_nego_release()` بإفراغها أولاً.
عبر rxe، وبمعدل 400 دورة تسجيل دخول لكل تشغيل، ظهر الخطأ (oops) في 10 من أصل 20 عملية تشغيل غير مصححة، وفي لا شيء من عمليات التشغيل الـ 20 المصححة بهذا التصحيح. يتم التعامل مع مرسل لا ينتظر أبداً عبر التصحيح التالي.
غير مختبر: iWARP، وجلسات الاستكشاف (discovery sessions) عبر isER، وأجهزة HCAs الحقيقية.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.