CVE-2026-53264
नेट/शेड्यूल: act_api: क्रिया जीवनचक्र के लिए RCU का उपयोग विलंबित मुक्ति के साथ करें
- प्रकाशित
- 25 जून 2026
- अद्यतन
- 5 अग॰ 2026
- सीएनए असाइन करना
- Linux
- साक्ष्य देखे गए
- 7 अग॰ 2026
प्राथमिक सीवीएसएस
nvd · CVSS 3.1
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:Hकम · अगले 30 दिन
- प्रतिशत
- 15.6%
- मॉडल दिनांक
- 21 सित॰ 2026
ईपीएसएस एक सांख्यिकीय अनुमान है, कोई निश्चितता या प्रभाव का माप नहीं। इसे सीवीएसएस, केईवी स्थिति, एक्सपोज़र और अपने वातावरण के साथ मिलाएं।
सारांश
लिनक्स कर्नेल में, निम्नलिखित भेद्यता को हल किया गया है: net/sched: act_api: क्रिया जीवनचक्र के लिए विलंबित मुक्ति के साथ RCU का उपयोग करें जब NEWTFILTER और DELFILTER एक साथ चलाए जाते हैं तो संबद्ध क्रिया के साथ रेस (race) उत्पन्न होना संभव है। आइए CPU0 पर NEWTFILTER और CPU1 पर DELFILTER चलने की स्थिति से समझाते हैं: 0: mutex_lock() <-- idr लॉक धारण करता है 0: rcu_read_lock() 0: p = idr_find(idr, index) <-- क्रिया p मान्य है (RCU IDR की सुरक्षा करता है) 0: mutex_unlock() <-- idr लॉक जारी करता है 1: refcount_dec_and_mutex_lock() <-- refcnt 1->0, mutex धारित 1: idr_remove(idr, index) <-- क्रिया IDR से हटाई गई 1: mutex_unlock() <-- mutex जारी हुआ जिससे क्रिया को हटाना संभव हुआ 1: tcf_action_cleanup(p); kfree(p) <-- p को तुरंत kfree करता है, कोई विलंब नहीं 0: refcount_inc_not_zero(&p->tcfa_refcnt) <-- ओह, UAF, p मुक्त की गई मेमोरी की ओर इशारा करता है यह पैच tc_action में struct rcu_head जोड़कर और विलंब के लिए उपयोग करके तथा हटाने के पथ में अंतिम kfree() को विलंबित करने के लिए call_rcu() प्रस्तुत करके NEWTFILTER और DELFILTER के बीच रेस स्थिति को ठीक करता है। नोट: यह कमिट d7fb60b9cafb ("net_sched: get rid of tcfa_rcu") का पुनर्वर्तन (revert) है, लेकिन साथ ही kfree_rcu() का सीधे उपयोग करने के लिए आधुनिकीकरण/सरलीकरण भी है। आइए नए पुनर्स्थापित कोड पथ को समझाते हैं: 0: rcu_read_lock() 1: refcount_dec_and_mutex_lock() <-- refcnt 1->0, mutex धारित 1: idr_remove(idr, index) 1: mutex_unlock() 1: call_rcu(&p->tcfa_rcu, tcf_action_rcu_free) <-- ग्रेस अवधि के बाद kfree को विलंबित करता है 0: p = idr_find(idr, index) 0: refcount_inc_not_zero(&p->tcfa_refcnt) <-- विफल होता है, refcnt पहले से 0 है 1: rcu_read_unlock() <-- जारी करता है ताकि ग्रेस अवधि के बाद मुक्ति चल सके CPU1 द्वारा idr_remove() को कॉल करने के बाद, ऑब्जेक्ट IDR के माध्यम से अब पहुंच योग्य नहीं है। CPU0 का बाद का idr_find() NULL लौटाएगा, और भले ही वह अभी भी एक पुराना पॉइंटर धारण करता हो, तत्काल kfree() अब RCU ग्रेस अवधि के बाद तक विलंबित है, इसलिए कोई UAF नहीं हो सकता।
स्रोत
2जिम्मेदारीपूर्ण उपयोग
भेद्यता जानकारी का उपयोग केवल उन प्रणालियों पर करें जिनके मालिक आप हैं या परीक्षण के लिए अधिकृत हैं। किटप्लॉइट सार्वजनिक अनुसंधान मेटाडेटा से लिंक करता है और शोषण कोड या दुर्भावनापूर्ण पेलोड को संग्रहीत नहीं करता है।