लिनक्स रिबूट सिस्टम कॉल में "मैजिक तर्क" का उपयोग क्या है?


10

जैसा कि मैं लिनक्स स्रोत कोड पढ़ रहा था, और अधिक विशेष रूप से सिस्टम कॉल कोड, मैं sys_rebootकार्यान्वयन में आया : http://lxr.free-electrons.com/source/kernel/reboot.c#L199

199 SYSCALL_DEFINE4(reboot, int, magic1, int, magic2, unsigned int, cmd,
200                 void __user *, arg)
201 {
202        ...
...    
286 }

बीच में, कोड का यह विशिष्ट टुकड़ा है:

209 
210         /* For safety, we require "magic" arguments. */
211         if (magic1 != LINUX_REBOOT_MAGIC1 ||
212                         (magic2 != LINUX_REBOOT_MAGIC2 &&
213                         magic2 != LINUX_REBOOT_MAGIC2A &&
214                         magic2 != LINUX_REBOOT_MAGIC2B &&
215                         magic2 != LINUX_REBOOT_MAGIC2C))
216                 return -EINVAL;

मुझे आश्चर्य है कि यह वास्तव में किस तरह की "सुरक्षा" प्रदान करता है। मेरा मतलब है, यह दुरुपयोग को रोकने के लिए है? इस मामले में, जैसा कि पैरामीटर सार्वजनिक हैं, कोई भी लाइब्रेरी या एप्लिकेशन सिस्टम कॉल का दुरुपयोग कर सकता है, भले ही उन्हें मापदंडों को पारित करने की आवश्यकता हो। मुझसे क्या छूट गया?


उदाहरण के लिए, आकस्मिक भ्रष्टाचार, या syscall संख्या में एक टाइपो बनाने के लिए संभवतः इसकी आकस्मिक कॉल। कि क्या वास्तव में इसके बारे में चिंता करने लायक कुछ है, पता नहीं।
1944

@derobert समझ में आता है ... लेकिन क्या सभी सिस्टम कॉल को इस तरह की सुरक्षा की आवश्यकता नहीं होगी? इसके अलावा getpidऔर निश्चित रूप से, यदि दुरुपयोग किया गया है, तो वे सभी अप्रत्याशित परिणाम हो सकते हैं। या हो सकता है, अन्य सभी syscalls के पास पहले से ही पर्याप्त पैरामीटर हों, ताकि उन्हें गलत तरीके से नुकसान पहुंचाने के लिए जाँच की जा सके। यह मेरे लिए "सुरक्षा" के एक अजीब विचार की तरह लगता है, हालांकि ...
lgeorget

वास्तव में। मुझे यकीन नहीं है कि अगर एक बिंदु पर लिनुस एक बग का पीछा कर रहा था जो # $ & # रखता था! उसकी मशीन को रिबूट करना, या अगर किसी ने इसे सिर्फ इसलिए जोड़ दिया क्योंकि वे पागल थे, आदि। इससे बचाव के लिए क्या करना चाहिए यह काफी स्पष्ट है; इससे सुरक्षा की आवश्यकता क्यों है, यह एक अच्छा प्रश्न है।
व्युत्पन्न

@derobert संभवत: एकीकृत परिपथों में उपयोग किए जाने वाले किसी व्यक्ति का एक होल्डओवर है, जहां शटडाउन कार्यक्षमता को सक्षम करने के लिए कई चिप्स किसी प्रकार के गार्ड को लागू करते हैं (उदाहरण के लिए, शटडाउन निर्देश कार्यों से पहले आपको एक विशेष रजिस्टर में XYZ बिट्स लिखना होगा)। यकीन नहीं है कि अगर उस के लिए समय समझ में आता है,
mbrig

जवाबों:


10

इस प्रश्न का उत्तर इस सुपर यूजर प्रश्न में दिया गया है:

असल में, एक पते में थोड़ा सा फ्लिप प्रोग्राम को यह सोचने का कारण बना सकता है कि यह एक सिस्टम कॉल कब कर रहा है, वास्तव में, यह reboot()सिस्टम कॉल कह रहा है। क्योंकि reboot()एक बहुत ही विनाशकारी, गैर-सिंक्रनाइज़िंग ऑपरेशन है जो सिस्टम की स्थिति को मिटा देता है - इस प्रकार बिट-फ्लिप समस्या के सबूत को मिटा देता है जो अन्यथा एक प्रोग्राम त्रुटि या आतंक के रूप में उजागर किया जाएगा - लिनक्स में इसके सफल उपयोग के आसपास अतिरिक्त सुरक्षा शामिल हैं ।

दिलचस्प रूप से पर्याप्त है, मैजिक नंबरों का दूसरा सेट लिनुस और उनकी तीन बेटियों के जन्मदिन के अनुरूप है:


1
आह, मैंने अन्य साइटों को सत्यापित करने के बारे में नहीं सोचा था। मैंने कभी नहीं सोचा था कि यह सवाल यहां से अलग हो सकता है। वैसे भी, आपके उत्तर के लिए धन्यवाद। :-)
लैजेटगेट जूल 20'14
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.