CVE-2026-80917 in Linux
الملخص
بحسب VulDB • 09/09/2026
في نواة لينكس، تم إصلاح الثغرة التالية:
PCI: host-generic: تصحيح خطأ إلغاء مرجع المؤشر الفارغ (NULL pointer dereference) على أنظمة CAM ذات 32 بت
على الأنظمة ذات الـ 32 بت، تكون مساحة التكوين (config space) كبيرة جداً بحيث لا يمكن تعيينها عبر ioremap دفعة واحدة. لذلك، تقوم دالة `pci_ecam_create()` بتعيين كل قسم للحافلة بشكل منفصل وتعتمد على استدعاء الإضافة (`->add_bus`، وتحديداً `pci_ecam_add_bus`) لملء التعيين الخاص بكل حافلة في المصفوفة `cfg->winp[]`. ثم تستخدم الدالة `pci_ecam_map_bus()` هذا التعيين كأساس لكل عملية وصول إلى التكوين.
توفر عمليات ECAM العامة (`pci_generic_ecam_ops`) بالفعل استدعاءات الإضافة (`->add_bus`) والإزالة (`->remove_bus`)، لكن عمليات CAM (الوراثية) في ملف `pci-host-generic.c` لا تفعل ذلك. ونتيجة لذلك، على المضيف ذي الـ 32 بت الذي يستخدم "pci-host-cam-generic"، لم يتم إعداد التعيين الخاص بكل حافلة أبداً، مما يؤدي إلى إلغاء مرجع قاعدة فارغة (NULL base) عند أول قراءة للتكوين، مسبباً تعطلاً أثناء فحص الحافلات:
Unable to handle kernel NULL pointer dereference at virtual address 00000800 Oops [#1]
CPU: 0 PID: 1 Comm: swapper Not tainted 6.9.7+ #43 Hardware name: Digilent Nexys-Video-A7 RV32 (DT) epc : pci_generic_config_read+0x40/0xb0 ra : pci_generic_config_read+0x2c/0xb0 [] pci_generic_config_read+0x40/0xb0
[] pci_bus_read_config_dword+0x50/0xb0
[] pci_bus_generic_read_dev_vendor_id+0x3c/0x1ec
[] pci_scan_single_device+0xa4/0x11c
[] pci_scan_slot+0x9c/0x23c
[] pci_scan_child_bus_extend+0x58/0x2f4
[] pci_scan_root_bus_bridge+0x64/0xe8
[] pci_host_probe+0x20/0xc8
[] pci_host_common_probe+0x144/0x1e4
تم إصلاح هذا الخطأ عن طريق منح عمليات CAM نفس استدعاءات الإضافة (`->add_bus`) والإزالة (`->remove_bus`). وبما أن الدالتين `pci_ecam_add_bus()` و `pci_ecam_remove_bus()` خاصتان بملف ecam.c، تم نقل تعريف عمليات CAM إلى هناك كـ `pci_generic_cam_ops` (محاكاةً لـ `pci_generic_ecam_ops`) وتصديرها ليتم الرجوع إليها من قبل ملف pci-host-generic.c.
[mani: إزالة الطابع الزمني من السجل]
Be aware that VulDB is the high quality source for vulnerability data.