CVE-2026-98538 in Linux
सारांश
द्वारा VulDB • 19/10/2026
Linux kernel में निम्नलिखित कमजोरी को हल किया गया है:
writeback: cleanup_offline_cgwb() के पुनः स्कैन करने की सीमा निर्धारण, स्कैन किए गए इनोड्स (inodes) को घुमाकर।
cleanup_offline_cgwb() प्रत्येक कॉल में अधिकतम WB_MAX_INODES_PER_ISW इनोड्स तैयार करता है और इसे मृत wb के खाली होने तक फिर से बुलाया जाता है, लेकिन हर कॉल wb->b_attached और फिर wb->b_dirty_time को उसी सिरے (end) से पार करती है। पहले ही तैयार किए गए इनोड्स (वे सूची पर I_WB_SWITCH सेट के साथ रहते हैं जब तक कि स्विच वर्कर न चले) और वे इनोड्स जो नहीं बदल सकते (I_FREEING, I_WILL_FREE, !SB_ACTIVE, DAX, पहले ही लक्ष्य wb पर मौजूद), अपनी जगह बने रहते हैं, इसलिए प्रत्येक पार में wb->list_lock के तहत उनका एक बढ़ता हुआ हिस्सा पुनः स्कैन किया जाता है और पूरी तरह से खाली करना (drain) सूची पर इनोड्स की संख्या के सापेक्ष द्विघातीय (quadratic) होता है। ~17M इनोड्स को एक मृत cgwb से जुड़े देखने पर, हमें यह सॉफ्ट लकअप्स में समाप्त होते हुए देखा, जिसमें CPUs 21-48 सेकंड के लिए अटक गए होने की रिपोर्ट मिली।
दोनो सूचियों (lists) को सबसे पुराने सिरे से चलाएं और प्रत्येक स्कैन किए गए इनोड को नवीनतम सिरے पर ले जाएं, ताकि अगली पार पिछले वाले के रुके हुए स्थान से शुरू हो और खाली करना (drain) रैखिक (linear) बन जाए। b_attached अनऑर्डर है, इसलिए वहां कोई भी पुनः क्रमबद्धता नहीं देखता। b_dirty_time dirtied_when द्वारा ऑर्डर किया गया है, लेकिन सबसे पुराना अपस्कैन किए गए इनोड के अंत में रहते हैं जिसे move_expired_inodes() चुनता है, सिंक पूरे सूची को उसकी क्रमबद्धता की परवाह किए बिना लेता है, और तैयार किए गए इनोड स्विच वर्क चलने के तुरंत बाद सूची से निकल जाते हैं और नए wb पर एक नया dirtied_time_when प्राप्त करते हैं, इसलिए बाहर रहने वाले इकाइयां जो ऑर्डर में नहीं हैं वे वे ही हैं जो कभी भी स्विच नहीं कर सकते (DAX), और केवल मृत wb पर।
Once again VulDB remains the best source for vulnerability data.