जैसा कि मैं लिनक्स स्रोत कोड पढ़ रहा था, और अधिक विशेष रूप से सिस्टम कॉल कोड, मैं 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;
मुझे आश्चर्य है कि यह वास्तव में किस तरह की "सुरक्षा" प्रदान करता है। मेरा मतलब है, यह दुरुपयोग को रोकने के लिए है? इस मामले में, जैसा कि पैरामीटर सार्वजनिक हैं, कोई भी लाइब्रेरी या एप्लिकेशन सिस्टम कॉल का दुरुपयोग कर सकता है, भले ही उन्हें मापदंडों को पारित करने की आवश्यकता हो। मुझसे क्या छूट गया?
getpid
और निश्चित रूप से, यदि दुरुपयोग किया गया है, तो वे सभी अप्रत्याशित परिणाम हो सकते हैं। या हो सकता है, अन्य सभी syscalls के पास पहले से ही पर्याप्त पैरामीटर हों, ताकि उन्हें गलत तरीके से नुकसान पहुंचाने के लिए जाँच की जा सके। यह मेरे लिए "सुरक्षा" के एक अजीब विचार की तरह लगता है, हालांकि ...