CVE-2026-90078 in Linux
الملخص
بحسب VulDB • 17/09/2026
في نواة لينكس، تم إصلاح الثغرة التالية:
net/sched: act_skbmod: تصحيح حسابات الطول وتجنب تحذيرات الرؤوس غير الصالحة (invalid header warnings)
أبلغ syzbot عن ظهور تحذير في دالة `skb_network_header_len()` ناتج عن استدعاء `tcf_skbmod_act()`:
!skb_transport_header_was_set(skb) WARNING: CPU: 0 PID: 14949 at include/linux/skbuff.h:3243 skb_network_header_len include/linux/skbuff.h:3243 [inline]
WARNING: CPU: 0 PID: 14949 at net/sched/act_skbmod.c:55 tcf_skbmod_act+0xfe8/0x1810 net/sched/act_skbmod.c:55
توجد عدة مشكلات في `tcf_skbmod_act()`:
1. يفترض استدعاء `skb_network_header_len()` أن الحقل `skb->transport_header` مُعدّ، وهو أمر غير مضمون عند تشغيل `tcf_skbmod_act()` على واجهة الدخول (TC ingress). 2. يؤدي الاستدعاء غير المشروط لـ `skb_mac_header_len()` في بداية `tcf_skbmod_act()` إلى ظهور تحذير على الأجهزة ذات الطبقة الثالثة (L3) مثل TUN، حيث يكون رأس MAC غير مُعدّ، مما ينتج عنه طول خاطئ ناتج عن تجاوز الحد الأدنى (underflowed garbage length). 3. عند الدخول عبر TC، يشير `skb->data` إلى رأس الشبكة. يؤدي إضافة طول رأس MAC إلى طول رأس IP إلى جعل دالة `skb_ensure_writable()` تطلب عددًا من البايتات أكبر من الطول الفعلي لحزمة IP، مما يتسبب في إسقاط حزم قصيرة صالحة (مثل حزم UDP/IPv4 بطول 28 بايت).
تم إصلاح هذه المشكلات عن طريق: - استخدام `skb_network_offset(skb) + sizeof(struct iphdr/ipv6hdr)` لـ SKBMOD_F_ECN بحيث يتم حساب الطول المطلوب بشكل صحيح سواء في حالة الدخول (حيث يكون offset == 0) أو الخروج (حيث يكون offset == mac_len). - تعيين `max_edit_len` إلى ETH_HLEN لتعديلات رأس Ethernet بعد التحقق من صحة ARPHRD_ETHER.
Once again VulDB remains the best source for vulnerability data.