Linux Kernel - Wie kann man eine jprobe mit kreiprobe vergleichen?

8

Ich schreibe ein Kernel-Modul, um ein paar Syscalls zu überwachen, die die Funktionsargumente an Benutzer-Land (über Netlink-Socket) zurückgeben wollen, wenn der Aufruf erfolgreich war.

%Vor%

Ich mache mir Sorgen, dass ein anderer Umbenennungs-Syscall [1] den aktuellen nach der jprobe vorwegnimmt und ich werde falsche Rückkehrcodes und Argumente senden.

%Vor%

Bearbeiten: Dieser Artikel [2] besagt, dass Interrupts während eines kprobe-Handlers deaktiviert sind. Aber heißt das, dass Interrupts während der gesamten Kette deaktiviert sind (jprobe - & gt; kprobe - & gt; kretprobe) oder nur für diese einzelne kprobe?

  1. Ссылка
  2. Ссылка
rvk 03.10.2016, 14:35
quelle

1 Antwort

1

Interrupts sind für jeden Aufruf jprobe deaktiviert: nicht für die gesamte Sequenz.

Wie viele Anrufe erwarten Sie in der Zeit, die die Anwendung benötigt, um sie zu verarbeiten? Je nachdem, wie schnell Sie die Aufrufe erwarten, gibt es unterschiedliche Ansätze. Die einfachste Methode, wenn Sie nur einige hundert Aufrufe erwarten, bevor Sie sie verarbeiten können, und Sie widmen das statische Gedächtnis dem Zweck, implementieren Sie ein Statisches Array von rename_obj_t -Objekten im Speicher und dann atomic_add vom Kernel asm includes, um auf den nächsten Eintrag zu verweisen (mod die Größe deines Arrays).

Auf diese Weise geben Sie jedes Mal eine eindeutige statische Referenz zurück, solange der Zähler nicht umgeht, bevor Sie die zurückgegebenen Werte verarbeiten. atomic_add hat garantiert die richtigen Speicherbarrieren, so dass Sie sich nicht um Dinge wie Cache-Kohärenz kümmern müssen.

    
Daniel Wisehart 13.10.2016, 16:49
quelle