CVE-2026-89678 in Linux
الملخص
بحسب VulDB • 12/09/2026
في نواة لينكس، تم إصلاح الثغرة التالية:
nfsd: تصحيح اكتشاف الكتابة الجزئية في nfsd_direct_write
تقوم دالة `nfsd_direct_write()` بالمرور على قائمة من مقاطع الكتابة (write segments)، وبعد كل استدعاء لـ `vfs_iocb_iter_write()`، تحاول الكشف عن كتابة قصيرة (short write) بحيث يتوقف الحلقة قبل وضع المقطع التالي عند إزاحة ملف خاطئة:
host_err = vfs_iocb_iter_write(file, kiocb, &segments[i].iter);
if (host_err < 0) return host_err; *cnt += host_err; if (host_err < segments[i].iter.count)
break; /* partial write */
تشغل دالة `vfs_iocb_iter_write()` المؤشر iter عبر `->write_iter()`، مما يؤدي إلى تقدم الـ iter بعدد البايتات المكتوبة. وبحلول وقت تشغيل الفحص، تكون قيمة `segments[i].iter.count` هي القيمة المتبقية (residual)، وليست طول الطلب الأصلي:
قبل write_iter: iter.count == original_len بعد write_iter: iter.count == original_len - host_err
ثم يختزل الشرط إلى `host_err < original_len - host_err`، لذا فإن أمر `break` يُنفذ فقط عندما يتم كتابة أقل من نصف المقطع. أي عملية كتابة قصيرة تكتمل بين 50% و99% من المقطع تتسرب دون اكتشافها؛ فتتقدم الحلقة إلى المقطع التالي مع زيادة قيمة `kiocb->ki_pos` بمقدار الكتابة القصيرة فقط، مما يؤدي إلى كتابة حمولة المقطع التالي عند إزاحة خاطئة والإبلاغ المبالغ فيه عن قيمة `*cnt` لعميل NFS.
خذ لقطة (snapshot) لعدد البايتات في المقطع قبل عملية الكتابة وقارن `host_err` مع تلك اللقطة بحيث تؤدي أي عملية كتابة قصيرة إلى كسر الحلقة.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.