2010-03-19 6 views
24

में उपयोगकर्ता-स्थान पते की नेस्टेड पेज-फॉल्टिंग, मैं जानना चाहता हूं कि उपयोगकर्ता-पृष्ठ में लाने के लिए कर्नेल चल रहा है जब कर्नेल चल रहा है, तो उपयोगकर्ता-स्पेस पता पेज-गलती के लिए कार्यात्मक रूप से गलत है या नहीं।लिनक्स

ओएस लिनक्स 2.6.30

मान लें कि दोनों उपयोगकर्ता के पते मान्य हैं कार्य के लिए (VMA, rw अनुमति के भीतर आने वाले) है।

जब मैं कर्नेल कोड की जांच करता हूं, तो मुझे लगता है कि कर्नेल ने नेस्टेड गलती पर ध्यान नहीं दिया है अगर दोषपूर्ण पते वैध हैं और गलती परमाणु-संदर्भ या आईआरक हैंडलर में नहीं होती है।

(मुझे नहीं लगता कि उत्तर सीपीयू-विशिष्ट है, लेकिन मैं जोड़ता हूं कि मुझे बांह और मिप्स में दिलचस्पी है)।

उदाहरण: यदि मैं पृष्ठ-गलती हैंडलर से स्टैक-डेटा मुद्रित करता हूं तो परिदृश्य हो सकता है।

+0

मैं इसे दो बार जवाब देने के लिए तैयार था, स्वयं की जांच की, और मुझे अभी भी यकीन नहीं है। एक महान सवाल के लिए +1। –

उत्तर

1

पिछले एक घंटे के लिए पता चलता है कि यह ठीक है कर्नेल के सूत्रों के माध्यम से देख रहे हैं: न तो struct vm_operations_struct की परिभाषा है और न ही handle_mm_fault() के बीच कोड और कॉल करने के लिए vma-> vm_ops->__do_fault() में गलती इस बारे में कोई सचेतक बयान है, और कुछ -> गलती हैंडलर मैंने देखा कि इसके बारे में चिंतित नहीं था ...

... मुझे लगता है कि मुख्य बात यह है कि आपको एक ही पते पर फिर से गलती करके एक अनंत रिकर्सन में जाने से बचने की जरूरत है, लेकिन संभवतः यह तब होगा जब कर्नेल स्टैक में वीएमए था, जो संभवतः होने वाला नहीं है?

0

यह बिल्कुल सही है। वास्तव में, आप भी सो सकते हैं।

लेकिन आप इसे केवल line पारित कर सकते हैं, क्योंकि आप गैर-परमाणु संदर्भ में होंगे।