Was ist die Verwendung von "magischen Argumenten" in Linux Neustart Systemaufruf?

10

Beim Lesen des Linux-Quellcodes und insbesondere des Systemaufrufcodes stieß ich auf die sys_rebootImplementierung: 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?

lgeorget
quelle
Dies ist wahrscheinlich auf versehentliche Anrufe zurückzuführen, die beispielsweise auf eine Speicherbeschädigung oder einen Tippfehler in einer Syscall-Nummer zurückzuführen sind. Ob das wirklich etwas ist, worüber man sich Sorgen machen sollte, weiß ich nicht.
Derobert
@derobert Sinnvoll, aber ... würden nicht alle Systemaufrufe einen solchen Schutz benötigen? Außer getpidund 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 ...
lgeorget
Tatsächlich. Ich bin mir nicht sicher, ob Linus irgendwann einen Fehler verfolgte, der # $ & # hielt! Neustart seiner Maschine oder wenn jemand sie nur hinzugefügt hat, weil sie paranoid waren usw. Was sie schützen soll, ist ziemlich klar; Warum ein Schutz davor erforderlich ist, ist eine gute Frage.
Derobert
@derobert Möglicherweise ein Überbleibsel von jemandem, der an integrierte Schaltkreise gewöhnt ist, bei dem viele Chips eine Art Schutz implementieren, um die Abschaltfunktion zu aktivieren (Sie müssen beispielsweise XYZ-Bits in ein spezielles Register schreiben, bevor die Abschaltanweisung funktioniert). Ich
bin

Antworten:

10

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 . Da reboot()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:

Jagd
quelle
1
Ah, ich habe nicht daran gedacht, die anderen Websites zu überprüfen. Ich hätte nie gedacht, dass diese Frage anders als hier gehören könnte. Wie auch immer, danke für deine Antwort. :-)
Lgeorget