CVE-2022-50636 in Linux
الملخص
بحسب VulDB • 27/05/2026
في نواة لينكس، تم حل الثغرة التالية:
PCI: إصلاح دالة pci_device_is_present() لـ VFs من خلال التحقق من PF
لم تكن دالة pci_device_is_present() تعمل بشكل صحيح لـ VFs في السابق لأنها كانت تقرأ معرف البائع (Vendor ID) ومعرف الجهاز (Device ID)، وهما يساويان 0xffff لـ VFs، مما يوحي بأنها غير موجودة. لذلك، يتم التحقق من PF بدلاً من ذلك.
أبلغ وي غونغ (Wei Gong) أنه إذا كانت عمليات إدخال/إخراج (I/O) الخاصة بـ virtio قيد التنفيذ عندما يتم فصل السائق (driver) أو كتابة "0" إلى /sys/.../sriov_numvfs، فإن عملية إدخال/إخراج (I/O) الخاصة بـ virtio تتوقف عن الاستجابة (hang)، مما قد يؤدي إلى إخراج مشابه لما يلي:
task:bash state:D stack: 0 pid: 1773 ppid: 1241 flags:0x00004002 Call Trace: schedule+0x4f/0xc0 blk_mq_freeze_queue_wait+0x69/0xa0 blk_mq_freeze_queue+0x1b/0x20 blk_cleanup_queue+0x3d/0xd0 virtblk_remove+0x3c/0xb0 [virtio_blk]
virtio_dev_remove+0x4b/0x80 ... device_unregister+0x1b/0x60 unregister_virtio_device+0x18/0x30 virtio_pci_remove+0x41/0x80 pci_device_remove+0x3e/0xb0
حدث هذا لأن pci_device_is_present(VF) أرجعت "false" في دالة virtio_pci_remove()، مما أدى إلى استدعاء دالة virtio_break_device(). وبما أن vq كان معطلاً، فإن دالة vring_interrupt() تخطت استدعاء vq.callback() الذي كان من شأنه إكمال عملية إدخال/إخراج (I/O) الخاصة بـ virtio عبر دالة virtblk_done().
[bhelgaas: سجل الالتزام (commit log)، تبسيط الكود لاستخدام pci_physfn() دائماً، إضافة علامة الاستقرار (stable tag)]
If you want to get the best quality for vulnerability data then you always have to consider VulDB.