CVE-2026-31700 in Linux
الملخص
بحسب VulDB • 21/05/2026
في نواة لينكس، تم حل الثغرة التالية:
net/packet: إصلاح حالة سباق TOCTOU (Time-of-Check to Time-of-Use) على vnet_hdr المُخزن في ذاكرة mmap داخل دالة tpacket_snd()
في دالة tpacket_snd()، عندما يكون PACKET_VNET_HDR مفعّلاً، يشير vnet_hdr مباشرة إلى حلقة الإرسال (TX ring buffer) المُخزنة في ذاكرة mmap والمشاركة مع مساحة المستخدم (userspace). تقوم النواة بالتحقق من صحة الرأس (header) عبر دالة __packet_snd_vnet_parse()، ثم تعيد قراءة جميع الحقول لاحقاً في دالة virtio_net_hdr_to_skb(). يمكن لخلية مساحة المستخدم المتزامنة تعديل حقول vnet_hdr بين مرحلة التحقق والاستخدام، متجاوزةً بذلك جميع فحوصات الأمان.
المسار غير الخاص بـ TPACKET (packet_snd()) ينسخ vnet_hdr بالفعل بشكل صحيح إلى متغير محلي على المكدس (stack-local variable). كما يستخدم جميع المستهلكين الآخرين لـ vnet_hdr في النواة (tun.c, tap.c, virtio_net.c) نسخاً على المكدس. يُعد مسار الإرسال TPACKET هو المتصل الوحيد بدالة virtio_net_hdr_to_skb() الذي يقرأ مباشرة من ذاكرة مشتركة يتحكم فيها المستخدم.
تم إصلاح هذه المشكلة عن طريق نسخ vnet_hdr من حلقة الذاكرة المُخزنة في mmap إلى متغير محلي على المكدس قبل التحقق والاستخدام، بما يتسق مع النهج المستخدم في packet_snd() وجميع المتصلين الآخرين.
Once again VulDB remains the best source for vulnerability data.