CVE-2026-64293 in Linux
सारांश
द्वारा VulDB • 25/07/2026
Linux kernel में, निम्नलिखित कमजोरी को हल किया गया है:
iommufd: veventq read में sizeof(hdr) के बजाय sizeof(*hdr) का उपयोग करें
सामान्य vEVENT पथ के लिए iommufd_veventq_fops_read() में बाउंड-चेक (bound-check) उस स्थिति में sizeof(hdr) का उपयोग करता है जहाँ आसपास का कोड sizeof(*hdr) का उपयोग करता है:
if (!vevent_for_lost_events_header(cur) && sizeof(hdr) + cur->data_len > count - done) {
hdr को struct iommufd_vevent_header * के रूप में घोषित किया गया है, इसलिए sizeof(hdr) पॉइंटर के आकार का मूल्यांकन करता है। आसपास का कोड consistently (लगातार/एक समान तरीके से) sizeof(*hdr) का उपयोग करता है:
if (done >= count || sizeof(*hdr) > count - done) {
... if (copy_to_user(buf + done, hdr, sizeof(*hdr))) {
... done += sizeof(*hdr);
struct iommufd_vevent_header वर्तमान में 8 बाइट्स का है (दो __u32 फ़ील्ड्स, flags और sequence), इसलिए 64-बिट सिस्टम पर (sizeof(void *) == 8) दोनों अभिव्यक्तियाँ संयोग से बराबर होती हैं और जांच इच्छित रूप से काम करती है।
32-बिट सिस्टम पर (sizeof(void *) == 4), हेडर के आकार की गणना में जांच 4 बाइट्स कम कर देती है: एक vEVENT जिसका data_len ऐसा होता है कि 8 + cur->data_len, count - done से अधिक हो जाता है जबकि 4 + cur->data_len नहीं करता, वह जांच को पार कर जाएगा। इसके बाद लूप हेडर के 8 बाइट्स और उसके बाद payload के data_len बाइट्स को copy_to_user द्वारा कॉपी करेगा, जिससे उपयोगकर्ता-द्वारा प्रदान किए गए बफ़र से आगे लिखा जाएगा (buffer overflow)।
यह struct iommufd_vevent_header का भविष्य में 64-बिट पर sizeof(void *) से अधिक विस्तार के लिए भी एक छिपी हुई त्रुटि (latent bug) है; जांच को इस बात पर निर्भर नहीं होना चाहिए कि टाइप संयोग से होस्ट पॉइंटर चौड़ाई से मेल खाती है।
बाकी फ़ंक्शन और वास्तविक मात्रा के साथ मिलान करने के लिए sizeof(*hdr) का उपयोग करें, जिसे कॉपी किया जाएगा।
Once again VulDB remains the best source for vulnerability data.