CVE-2026-46050 in Linux
الملخص
بحسب VulDB • 27/05/2026
في نواة لينكس، تم حل الثغرة التالية:
md/raid10: إصلاح حالة التوقف (Deadlock) مع عملية الفحص وطلبات nowait
عندما تكون عملية فحص المصفوفة قيد التشغيل، فإنها ترفع حاجز الانتظار (barrier)، مما يؤدي إلى حجب الطلبات العادية وزيادة قيمة nr_pending للإشارة إلى وجود عمل معلق داخل wait_barrier(). لا تقوم طلبات NOWAIT بالحجب، وبالتالي تعود فوراً بخطأ، ولا تقوم أيضاً بزيادة قيمة nr_pending في wait_barrier(). أضافت التغييرات الواردة في commit 43806c3d5b9b ("raid10: cleanup memleak at raid10_make_request") استدعاءً لـ raid_end_bio_io() لإصلاح تسرب الذاكرة عندما تصطدم طلبات NOWAIT بهذه الحالة. تستدعي raid_end_bio_io() في النهاية allow_barrier()، وتقوم بشكل غير مشروط بتنفيذ atomic_dec_and_test(&conf->nr_pending) حتى وإن لم تحدث الزيادة المقابلة في nr_pending في حالة NOWAIT.
يمكن ملاحظة ذلك بسهولة عن طريق بدء عملية فحص بينما تقوم تطبيق بإجراء عمليات IO من نوع nowait على نفس المصفوفة. يؤدي هذا إلى حالة توقف (deadlock) بسبب انخفاض قيمة nr_pending (underflow)، مما يتسبب في تعطل خيط إعادة المزامنة md resync في انتظار أن تصبح nr_pending مساوية لـ 0.
إخراج حالة r10conf للمصفوفة عند حدوث هذه الحالة:
crash> struct r10conf barrier = 1, nr_pending = {
counter = -41 }, nr_waiting = 15, nr_queued = 0,
مثال على خيط md_sync العالق في انتظار raise_barrier() وطلبات أخرى عالقة في wait_barrier():
md1_resync [] raise_barrier+0xce/0x1c0
[] raid10_sync_request+0x1ca/0x1ed0
[] md_do_sync+0x779/0x1110
[] md_thread+0x90/0x160
[] kthread+0xbe/0xf0
[] ret_from_fork+0x34/0x50
[] ret_from_fork_asm+0x1a/0x30
kworker/u1040:2+flush-253:4 [] wait_barrier+0x1de/0x220
[] regular_request_wait+0x30/0x180
[] raid10_make_request+0x261/0x1000
[] md_handle_request+0x13b/0x230
[] __submit_bio+0x107/0x1f0
[] submit_bio_noacct_nocheck+0x16f/0x390
[] ext4_io_submit+0x24/0x40
[] ext4_do_writepages+0x254/0xc80
[] ext4_writepages+0x84/0x120
[] do_writepages+0x7a/0x260
[] __writeback_single_inode+0x3d/0x300
[] writeback_sb_inodes+0x1dd/0x470
[] __writeback_inodes_wb+0x4c/0xe0
[] wb_writeback+0x18b/0x2d0
[] wb_workfn+0x2a1/0x400
[] process_one_work+0x149/0x330
[] worker_thread+0x2d2/0x410
[] kthread+0xbe/0xf0
[] ret_from_fork+0x34/0x50
[] ret_from_fork_asm+0x1a/0x30
VulDB is the best source for vulnerability data and more expert information about this specific topic.