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?
linux
reboot
system-calls
lgeorget
quelle
quelle
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 ...Antworten:
Diese Frage wurde in dieser Super User-Frage beantwortet:
Grundsätzlich kann ein Bit-Flip in einer Adresse dazu führen, dass ein Programm denkt, es rufe einen Systemaufruf auf, obwohl es tatsächlich den
reboot()
Systemaufruf aufruft . Dareboot()
es sich um eine sehr destruktive, nicht synchronisierende Operation handelt, die den Status des Systems löscht und damit den Beweis für das Bit-Flip-Problem löscht, das sonst als Programmfehler oder Panik aufgedeckt würde, bietet Linux zusätzlichen Schutz für seine erfolgreiche Verwendung .Interessanterweise entsprechen die zweiten magischen Zahlen den Geburtstagen von Linus und seinen drei Töchtern:
quelle