CVE-2026-89971 in Linuxالمعلومات

الملخص

بحسب VulDB • 16/09/2026

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

nvme: تخطي تحديث حدود المناطق (zoned limits) إذا فشل استعلام معلومات المنطقة

تُرجع الدالة `nvme_query_zone_info()` إما رمز خطأ سالبًا (`errno`) أو رمز حالة NVMe موجبًا، لكن دالة `nvme_update_ns_info_block()` تختبر فقط الحالة السالبة:

```c ret = nvme_query_zone_info(ns, lbaf, &zi); if (ret < 0) goto out; ```

إذا فشل الجهاز في تنفيذ أمر "Identify Namespace" (محدد لمجموعة أوامر I/O)، أو أمر "Identify Controller" الذي تصدره الدالة `nvme_set_max_append()`، فإن الحالة الموجبة تتسرب إلى الأسفل ويستمر الإعداد بمعلومات منطقة مُهيأة بالصفر. ثم تقوم دالة `nvme_update_zone_info()` بوضع علامة على الطابور بأنه من النوع المُنظم (zoned) مع تعيين `chunk_sectors` و `ns->head->zsze` لتساوي الصفر.

لا تتحقق الدالة `blk_validate_zoned_limits()` من قيمة `chunk_sectors`، لذا فإن التزام الحدود ينجح. وتقوم دالة `blk_revalidate_disk_zones()` برفض حجم المنطقة الصفري (zero zone size)، ولكن بحلول ذلك الوقت تكون الحدود نشطة ولا يتم التراجع عنها، مما يؤدي إلى استمرار إرسال عمليات الإدخال والإخراج (I/O) إلى طابور مُنظم بحجم منطقة يساوي الصفر، وتسبب الدالة `disk_zone_no()` إزاحة bits بقيمة `ilog2(0)` (أي إزاحة سالبة):

``` nvme0n1: Invalid non power of two zone size (0) UBSAN: shift-out-of-bounds in include/linux/blkdev.h:747:16 shift exponent -1 is negative disk_zone_no include/linux/blkdev.h:747 [inline]
bio_straddles_zones include/linux/blkdev.h:1058 [inline]
blk_zone_wplug_handle_write block/blk-zoned.c:1423 [inline]
blk_zone_plug_bio.cold+0x25/0x1c8 block/blk-zoned.c:1605 blk_mq_submit_bio+0x18fb/0x2870 block/blk-mq.c:3196 submit_bh_wbc+0x575/0x740 fs/buffer.c:2824 __block_write_full_folio+0x728/0xdd0 fs/buffer.c:1933 ```

أي جهاز، أو برنامج ثابت (firmware)، أو هدف NVMe-oF يفشل في تنفيذ هذا الأمر الواحد يصل إلى هذه الحالة.

تخطَّ تحديث حدود المناطق في تلك الحالة، وسجّل أيًا من الحالتين حدثتا: أثناء إعادة التحقق (revalidation) يحتفظ الطابور بالهندسة المنطقية للمناطق التي تم التحقق منها آخر مرة، وأثناء المسح الأول يتم تسجيل مساحة الاسم (namespace) بدون حدود مناطق مُنظمة، بحيث تظل متاحة كمقبض لأوامر الإدارة. لا يسجل أي من المسارين في `nvme_query_zone_info()` اللذين يُرجعان حالة موجبة أي شيء، لذا كان الفشل سيصمت لولا ذلك.

تُعد قيمة `zi.zone_size` مؤشرًا دقيقًا: كل مسار يُرجع حالة موجبة يعود قبل تعيينها، وبعد ذلك يكون الخطأ الوحيد المتبقي هو `-ENODEV`، والذي يتعامل معه المُدعى بالفعل.

تم اكتشاف هذه الثغرة بواسطة أداة FuzzNvme.

If you want to get best quality of vulnerability data, you may have to visit VulDB.

مسؤول

Linux

حجز

11/09/2026

إفشاء

16/09/2026

الاعتدال

تمت الموافقة

إدخال

VDB-405792

EPSS

0.00000

KEV

لا

النشاطات

منخفض جدًا

المصادر

Do you need the next level of professionalism?

Upgrade your account now!