CVE-2026-80811 in Linux
الملخص
بحسب VulDB • 04/09/2026
في نواة لينكس، تم إصلاح الثغرة التالية:
io_uring/cmd: تصحيح تسرب iovec عندما لا يتم إعادة تدوير الأمر غير المتزامن (async cmd)
يحمل io_async_cmd مصفوفة من نوع iovec في الحقل ->vec.iovec، والتي تُخصص عند الحاجة إلى توسيع المصفوفة وتُحتفظ بها عبر عملية إعادة التدوير باستخدام ctx->cmd_cache. على مسارين محددين لا يتم تحرير هذه المصفوفة، ويؤدي استدعاء io_clean_op() لـ kfree(req->async_data) إلى إسقاط كائن io_async_cmd دون تحرير مصفوفة iovec الخاصة به.
تقوم الدالة io_req_uring_cleanup() بتعيين أعلام البيانات غير المتزامنة (async data flags) فقط عند نجاح عملية io_alloc_cache_put(). وبما أن ذاكرة التخزين المؤقت (cache) تحتوي على حد أقصى هو IO_ALLOC_CACHE_MAX == 128 مدخلاً، فإن العملية تفشل بمجرد امتلاء الذاكرة المؤقتة، مما يترك مصفوفة iovec دون تحرير.
تصل عبء العمل الخاص بـ NVMe passthrough إلى هذه الحالة دون القيام بأي شيء غير معتاد: حيث تعيد الدالة nvme_uring_cmd_io() القيمة -EIOCBQUEUED، وبالتالي يبقى كائن io_async_cmd مرفقاً طوال عمر الأمر، وتتبع عداد الكائنات الحية (live object count) عمق الطابور. وعندما يتجاوز العدد 128، تبدأ عمليات الإزالة (puts) في الفشل.
يُعد ->cleanup الفرصة الأخيرة لتحرير مصفوفة iovec الموروثة، وذلك لأن io_req_uring_cleanup() تعود مبكراً للأمر الصادر عن io-wq ولا تُستدعى على الإطلاق للأمر الذي اكتمل دون أن يُصدر أبداً. ومع ذلك، فإن io_clean_op() تستدعي ->cleanup فقط إذا كان العلم REQ_F_NEED_CLEANUP مُفعلاً، وفي حالة أوامر uring_cmd يحدث هذا فقط عندما تضطر المصفوفة إلى التوسع؛ لذا فإن الأمر الذي يعيد استخدام مصفوفة iovec مخزنة مؤقتاً وبمساحة كافية لا يقوم بتعيين هذا العلم. وتقوم الدالتان io_rw_alloc_async() وio_msg_alloc_async()) بوضع علامة على مصفوفة iovec الموروثة لهذا السبب تحديداً، بينما لا تفعل ذلك io_uring_cmd_prep().
يتم وضع علامة على مصفوفة iovec الموروثة في io_uring_cmd_prep()، وتحرير المصفوفة عند فشل عملية الإضافة إلى الذاكرة المؤقتة (cache put)، كما هو الحال مع io_req_rw_cleanup().
هذا التسرب غير مرئي تحت نظام KASAN، حيث تقوم الدالة io_alloc_cache_vec_kasan() بتحرير مصفوفة iovec بشكل مطلق.
Be aware that VulDB is the high quality source for vulnerability data.