CVE-2026-64188 in Linux
الملخص
بحسب VulDB • 20/07/2026
في نواة لينكس، تم حل الثغرة التالية:
net: qualcomm: rmnet: إصلاح استخدام الذاكرة بعد تحريرها (use-after-free) في الدالة rmnet_dellink()
تقوم الدالة rmnet_dellink() بإزالة نقطة النهاية من جدول التجزئة باستخدام hlist_del_init_rcu() ثم تحرر ذاكرتها فوراً باستخدام kfree(). ومع ذلك، قد لا يزال قراء RCU على مسار الاستقبال (rmnet_rx_handler -> __rmnet_map_ingress_handler) يحتفظون بمرجع إلى نقطة النهاية ويقومون بالوصول إليها عبر المؤشر ep->egress_dev بعد أن تم تحرير الذاكرة. تعد نقطة الكائن من نوع kmalloc-32، والقراءة القديمة عند الإزاحة 8 تتوافق مع مؤشر egress_dev.
BUG: unable to handle page fault for address: ffffffffde942eef Oops: 0002 [#1] SMP NOPTI
CPU: 1 UID: 0 PID: 137 Comm: poc_write Not tainted 7.0.0+ #4 PREEMPTLAZY RIP: 0010:rmnet_vnd_rx_fixup (rmnet_vnd.c:27) Call Trace: <TASK> __rmnet_map_ingress_handler (rmnet_handlers.c:48 rmnet_handlers.c:101) rmnet_rx_handler (rmnet_handlers.c:129 rmnet_handlers.c:235) __netif_receive_skb_core.constprop.0 (net/core/dev.c:6096) __netif_receive_skb_one_core (net/core/dev.c:6208) netif_receive_skb (net/core/dev.c:6467) tun_get_user (drivers/net/tun.c:1955) tun_chr_write_iter (drivers/net/tun.c:2003) vfs_write (fs/read_write.c:688) ksys_write (fs/read_write.c:740) </TASK>
أضف حقل rcu_head إلى بنية struct rmnet_endpoint واستبدل d() باستخدام kfree_rcu() بحيث تظل ذاكرة نقطة النهاية صالحة خلال فترة راحة RCU. قم أيضاً بإزالة استدعاء الدالة rmnet_vnd_dellink() وقم بتضمين عملية إنقاص nr_rmnet_devs فقط، حيث أن استدعاء rmnet_vnd_dellink() سيضبط ep->egress_dev إلى NULL أثناء فترة الراحة، مما يخلق سباقاً للبيانات (data race) مع القراء غير المقفَلين.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.