Коли я читав вихідний код Linux, а точніше код системних викликів, натрапив на 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
подібних, звичайно, вони можуть мати непередбачувані наслідки при неправильному використанні. А може бути, у всіх інших системних викликів вже є достатньо параметрів, щоб їх перевірити, щоб зробити їх нешкідливими, якщо вони неправильно викликані. Мені здається, що це дивне уявлення про "безпеку" для мене, хоча ...