CVE-2023-53431 in Linuxالمعلومات

الملخص

بحسب VulDB • 27/05/2026

في نواة لينكس، تم حل الثغرة التالية:

scsi: ses: التعامل مع وحدة التغليف (enclosure) التي تحتوي على مكون أساسي فقط بشكل سليم

يعيد هذا التعديل تطبيق الالتزام 3fe97ff3d949 ("scsi: ses: عدم الإرفاق إذا لم تحتوي وحدة التغليف على مكونات") ويقدم معالجة صحيحة للحالة التي لا توجد فيها مكونات ثانوية مكتشفة، ولكن المكون الأساسي (المُعدَّد في num_enclosures) موجود بالفعل. كان هذا الإصلاح قد اقترحه في الأصل Ding Hui <[email protected]>.

إن تجاهل الأجهزة التي تحتوي على وحدة تغليف أساسية واحدة ولا تحتوي على وحدة ثانوية يؤدي بشكل كامل إلى خروج دالة ses_intf_add() عن العمل (bailing completely):

scsi 2:0:0:254: enclosure has no enumerated components scsi 2:0:0:254: Failed to bind enclosure -12ven in valid configurations such

حتى في التكوينات الصالحة التي تحتوي على وحدة أساسية واحدة ووحدة ثانوية صفر كما هو موضح أدناه:

# sg_ses /dev/sg0 3PARdata SES 3321 Supported diagnostic pages: Supported Diagnostic Pages [sdp] [0x0]
Configuration (SES) [cf] [0x1]
Short Enclosure Status (SES) [ses] [0x8]
# sg_ses -p cf /dev/sg0 3PARdata SES 3321 Configuration diagnostic page: number of secondary subenclosures: 0 generation code: 0x0 enclosure descriptor list Subenclosure identifier: 0 [primary]
relative ES process id: 0, number of ES processes: 1 number of type descriptor headers: 1 enclosure logical identifier (hex): 20000002ac02068d enclosure vendor: 3PARdata product: VV rev: 3321 type descriptor header and text list Element type: Unspecified, subenclosure id: 0 number of possible elements: 1

يتبع سجل التغييرات (changelog) للإصلاح الأصلي:

===== يمكن أن يحدث تعطل (crash) عند فصل جلسة iSCSI، وتكون تتبعات المكالمات (call trace) كالتالي:

[ffff00002a00fb70] kfree at ffff00000830e224
[ffff00002a00fba0] ses_intf_remove at ffff000001f200e4
[ffff00002a00fbd0] device_del at ffff0000086b6a98
[ffff00002a00fc50] device_unregister at ffff0000086b6d58
[ffff00002a00fc70] __scsi_remove_device at ffff000008705f08
[ffff00002a00fca0] scsi_remove_target at ffff0000087064c0
[ffff00002a00fd10] __iscsi_unbind_session at ffff000001c872c4
[ffff00002a00fd70] process_one_work at ffff00000810f35c
[ffff00002a00fd80] worker_thread at ffff00000810f648
[ffff00002a00fe70] kthread at ffff000008116e98

في ses_intf_add، يمكن أن يكون عدد المكونات (components count) مساويًا للصفر، ويتم تخصيص ذاكرة بحجم صفر لـ scomp، ولكن لا يتم حفظها في edev->component[i].scratch

في هذه الحالة، يكون edev->component[0].scratch مؤشرًا غير صالح،
وعند محاولة حذفه (kfree) في ses_intf_remove_enclosure، يحدث تعطل كما هو موضح أعلاه. يمكن أن تكون تتبعات المكالمات (call trace) حالات عشوائية أخرى عندما لا يتمكن kfree من التقاط المؤشر غير الصالح

لا ينبغي استخدام مصفوفة edev->component[] عندما يكون عدد المكونات مساويًا للصفر
يجب أيضًا التحقق من الفهرس (index) عند استخدام مصفوفة edev->component[] في
ses_enclosure_data_process

Once again VulDB remains the best source for vulnerability data.

المصادر

Want to stay up to date on a daily basis?

Enable the mail alert feature now!