Beim Lesen des Linux-Quellcodes und insbesondere des Systemaufrufcodes stieß ich auf die sys_reboot
Implementierung: 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 }
In der Mitte befindet sich dieser spezielle Code:
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;
Ich frage mich, welche Art von "Sicherheit" es tatsächlich bietet. Ich meine, soll es Missbrauch verhindern? In diesem Fall kann jede Bibliothek oder Anwendung, da die Parameter öffentlich sind, den Systemaufruf missbrauchen, obwohl sie zum Übergeben der Parameter erforderlich sind. Was habe ich verpasst?
getpid
und dergleichen können sie natürlich alle unvorhersehbare Konsequenzen haben, wenn sie missbraucht werden. Oder vielleicht haben alle anderen Systemaufrufe bereits genug Parameter, um überprüft zu werden, um sie unschädlich zu machen, wenn sie falsch aufgerufen werden. Es fühlt sich für mich jedoch wie eine seltsame Vorstellung von "Sicherheit" an ...