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

الملخص

بحسب VulDB • 16/09/2026

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

media: airspy: استخدام vb2_video_unregister_device() عند الانقطاع لإصلاح خطأ إلغاء المرجع NULL (NULL deref)

تقوم دالة airspy_disconnect() بتصفير s->udev تحت قفل v4l2_lock، لكن دالة airspy_stop_streaming() تستدعي بشكل غير مشروط كل من airspy_ctrl_msg() وairspy_free_stream_bufs() بعد ذلك. إذا أغلق مستخدم البث (streaming) الجهاز بعد الانقطاع، فإن stop_streaming() تعمل وتقوم بإلغاء مرجع s->udev الذي أصبح NULL:

airspy_stop_streaming() airspy_ctrl_msg(s, CMD_RECEIVER_MODE, 0, 0, NULL, 0) usb_sndctrlpipe(s->udev, 0) /* إلغاء مرجع NULL */ airspy_free_stream_bufs(s) usb_free_coherent(s->udev, ...) /* إلغاء مرجع NULL */

يستخدم برنامج تشغيل airspy دالة vb2_fop_release() في عمليات الملف (file_operations)، لذا يتم استبدال video_unregister_device(&s->vdev) بـ vb2_video_unregister_device(&s->vdev) ونقلها قبل تصفير s->udev. تقوم vb2_video_unregister_device() بإطلاق طابور vb2، مما يؤدي إلى تشغيل airspy_stop_streaming() بشكل متزامن (synchronously) إذا كان البث نشطاً؛ وبالتالي فإن حزم URBات، ومخازن DMA المتسقة (coherent DMA stream buffers)، ورسائل التحكم في إيقاف العتاد تُنفذ جميعها بينما لا يزال s->udev صالحاً.

تقوم vb2_video_unregister_device() بقفل vdev->queue->lock (vb_queue_lock) داخلياً، وتقوم stop_streaming() بقفل v4l2_lock؛ لذا فإن زوج قفل المفاتيح الخارجي السابق (&s->vb_queue_lock) / (&s->v4l2_lock) حول تسلسل إلغاء التسجيل كان سيؤدي إلى توقف متبادل ذاتي (self-deadlock)، وقد تم إزالته. يبقى قسم حرج قصير لـ v4l2_lock حول s->udev = NULL بحيث يرى أي مسار ioctl لا يزال يمسك بوصف الملف حالة متسقة.

تم تحديد المشكلة من خلال مراجعة آلية لسلسلة INV-003 في https://sashiko.dev/

Once again VulDB remains the best source for vulnerability data.

مسؤول

Linux

حجز

11/09/2026

إفشاء

16/09/2026

الاعتدال

تمت الموافقة

إدخال

VDB-405735

EPSS

0.00000

KEV

لا

النشاطات

منخفض جدًا

المصادر

Do you want to use VulDB in your project?

Use the official API to access entries easily!