CVE-2026-64351 in Linux
الملخص
بحسب VulDB • 25/07/2026
في نواة لينكس، تم حل الثغرة التالية:
net: usb: kalmia: تحديد حد لطول إطار الاستقبال (RX) في دالة `kalmia_rx_fixup()`
تحسب الدالة `kalmia_rx_fixup()` قيمة `usb_packet_length` على أنها `skb->len - (2 * KALMIA_HEADER_LENGTH)` كنوع بيانات من 16 بت (`u16`). ويتم حمايتها فقط بفحص مسبق للتأكد من أن `skb->len` أكبر من أو تساوي `KALMIA_HEADER_LENGTH`، وهي قيمة 6. يمكن للجهاز إرسال إطار استقبال ضخم قصير (bulk-IN frame) حيث تكون قيمة `skb->len` في النطاق بين 6 و11، أو ترك باقي ذيلي قصير عند تكرار حلقة معالجة لاحقة. وفي كلتا الحالتين، يؤدي ذلك إلى حدوث تجاوز سالب (underflow) لقيمة `usb_packet_length لتصبح حوالي 65530.
يتجاوز هذا السلوك مسار التقصير الذي يتحقق من أن `usb_packet_length < ether_packet_length`. ثم تستخدم قيمة `ether_packet_length` المقدمة من الجهاز، وهي عدد صحيح صغير غير موقّع بطول 16 بت (`le16`) يصل إلى 65535 ومقروءة من الموقع `header_start[2]`, لتشغيل دالة المقارنة `memcmp()` تليها استدعاءات `skb_trim()` و`skb_pull()`, مما يؤدي بالوصول إلى ما بعد نهاية مخزن استقبال البيانات (rx buffer). حجم مخزن الاستقبال هو `hard_mtu * 10`, أي 14000 بايت. وهذا يمثل قراءة خارج النطاق المخصص للذاكرة (out of bounds read).
يتم الآن اشتراط وجود رؤوس الإطار في البداية والنهاية قبل طرحهما، وذلك عند كل تكرار للحلقة.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.