c - what to do with page fault from copy_from_user()? -
मेरे पास निम्न सिस्टम कॉल है:
लंबे do_print (int n, char * p) ) {चार टीएमपी [एन]; // आरेखित सरणी n बाइट्स इंट रेट = कॉपी_फ्रेम_यूसर (टीएमपी, पी, एन); If (! Ret) {// टीएमपी के साथ कुछ करना} रिटर्न रिट; } जो n & gt; 5000 के लिए गैर-शून्य मान देता है (मुझे पृष्ठ दोष की वजह से लगता है)।
मैं कॉपी को सफल होने के लिए कैसे बाध्य कर सकता हूं? दूसरे शब्दों में, यदि मैं सिस्टम कॉल को शून्य-शून्य मान देता है तो मुझे क्या करना चाहिए?
एक बड़ा आवंटन स्टैक पर सरणी आपको कुछ नहीं करना चाहिए, या वास्तव में ऐसा कर सकता है लिनक्स कर्नेल एक छोटे स्टैक के साथ चल रहा है, आमतौर पर 2 मेमोरी पेज। समान रूप से अधिक खतरनाक यह है कि अगर आपका चार टीएमपी [एन]; एक n पर निर्भर करता है जो कि यूजर स्पेस से आता है, उपयोगकर्ता को संभावित रूप से कर्नेल को क्रैश करने देता है ऐसी स्थिति में, आपको स्टैक पर बफर का उपयोग करने के बजाय स्मृति को गतिशील रूप से आवंटित करना होगा।
यदि आप copy_from_user () विफल हो जाते हैं, तो उपयोगकर्ता ने झूठ बोला है कर्नेल, और कर्नेल में कुछ गड़बड़ा कर चुका है।
इसे संभाल करने का सामान्य तरीका जो भी आप कर रहे हैं, से जमानत करना है, और पास-यूफ़ॉल्ट वापस उपयोगकर्ता स्थान तक। < / div>
Comments
Post a Comment