Mientras leía el código fuente de Linux, y más específicamente el código de llamadas del sistema, me encontré con la sys_reboot
implementación: 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 }
En el medio, está este código específico:
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;
Me pregunto qué tipo de "seguridad" realmente proporciona. Quiero decir, ¿es para evitar el mal uso? En este caso, como los parámetros son públicos, cualquier biblioteca o aplicación podría hacer un mal uso de la llamada del sistema a pesar de que están obligados a pasar los parámetros. ¿Qué me perdí?
getpid
y similares, por supuesto, todos pueden tener consecuencias impredecibles si se usan incorrectamente. O tal vez, todas las demás llamadas al sistema ya tienen suficientes parámetros para ser verificados para que sean inofensivos si se llaman incorrectamente. Se siente como una extraña idea de "seguridad" para mí, aunque ...