Ketika saya membaca kode sumber Linux, dan lebih khusus lagi kode panggilan sistem, saya menemukan sys_reboot
implementasi: 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 }
Di tengah, ada potongan kode khusus ini:
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;
Saya bertanya-tanya "keamanan" macam apa yang sebenarnya disediakan. Maksud saya, apakah itu untuk mencegah penyalahgunaan? Dalam hal ini, karena parameter bersifat publik, pustaka atau aplikasi apa pun dapat menyalahgunakan panggilan sistem meskipun harus melewati parameter. Apa yang saya lewatkan?
getpid
dan sejenisnya tentu saja, mereka semua dapat memiliki konsekuensi yang tidak terduga jika disalahgunakan. Atau mungkin, semua syscalls lain sudah memiliki cukup parameter untuk diperiksa agar tidak berbahaya jika salah dipanggil. Rasanya seperti ide aneh tentang "keselamatan" bagiku, ...