Quellcodebeispiel aus "Linux-Kernel-Programmierung"

8

las Robert Loves Buch, Kapitel 5 über syscalls, und fand dieses einfache Beispiel etwas fragwürdig:

%Vor%

Wie wir sehen, ist "buf" ein Objekt vom Typ "unsigned long" und auf dem Kernel-Stack definiert, d. h. sein Anfangswert ist wahrscheinlich Müll. Wie auch immer ist es gültig, "len" Bytes in den Stapel zu kopieren, wo buf ist, d. H. Es könnte etwas Nützliches überschreiben? Vielleicht ist das nur für dieses spezielle Beispiel in Ordnung?

    
Mark 29.06.2011, 02:43
quelle

2 Antworten

15

Es ist sehr fraglich. In der Tat ist es geradezu gefährlich. Ich werde dem Autor den Vorteil des Zweifels hier geben, da sie nur versuchen zu zeigen, wie copy_from_user und copy_to_user funktionieren, aber sie hätten wirklich ein Beispiel geben sollen, das nicht so gefährlich war.

Besonders da das Buch lyrisch darüber, wie Sie müssen besonders vorsichtig sein:

  

Systemaufrufe müssen sorgfältig alle ihre Parameter überprüfen, um sicherzustellen, dass sie gültig sind und   legal.The Systemaufruf läuft in kernel-Raum, und wenn der Benutzer ungültige Eingabe in die   Kernel ohne Einschränkung kann die Sicherheit und Stabilität des Systems leiden.

und bietet dann eine Möglichkeit für den Benutzer, den Kernel vollständig zu vernichten: -)

Der Text von der Kopie habe ich angegeben:

  

Betrachten wir einen Beispiel-Systemaufruf, der sowohl copy_from_user() als auch copy_to_user() verwendet. Dieser Syscall, silly_copy() , ist absolut wertlos; es kopiert Daten von seinem ersten Parameter in seinen zweiten. Dies ist insofern suboptimal, als es eine Zwischen- und Fremdkopie in den Kernraum für keinen Gewinn beinhaltet. Aber es hilft, den Punkt zu veranschaulichen.

%Vor%

Abgesehen von dem katastrophalen Fehler, Parameter nicht zu überprüfen, bin ich ziemlich sicher, dass der letzte Parameter von SYSCALL_DEFINE3 ein Komma fehlt (obwohl das nur ein Tippfehler wäre).

Ein weitaus besseres Beispiel, ohne willkürlichen Speicher zuweisen zu müssen, wäre wie folgt:

%Vor%

Jeder, der versucht, diesen Systemaufruf zu implementieren, wäre gut beraten, von diesem speziellen Beispiel in dem Buch wegzukommen, obwohl ich denke, dass er Ihnen zumindest ein gutes Kernel-Debuggerlebnis bietet: -)

    
paxdiablo 29.06.2011, 03:23
quelle
0
%Vor%     
user2264907 07.06.2014 05:55
quelle

Tags und Links