Ich schreibe einen ioctl-Treiber, der Daten im Userspace lesen und schreiben muss. Zur Visualisierung ist hier ein typisches Argument, das in einem Treiberaufruf geht:Sicherer Umgang mit Userspace-Zeigern in einem Treiber?
typedef struct {
unsigned int* src;
unsigned int* dst;
unsigned int buffer_size;
unsigned int key[8];
} aes_data
Ich bin nicht sehr gut versiert in wie virtuellen Speicher funktioniert, aber ich denke, es gibt hier ein Risiko ist. Der Userspace-Prozess könnte einen Zeiger auf Speicher bereitstellen, den er nicht besitzt. Die angegebene Puffergröße könnte ebenfalls einen Überlauf in den Speicher eines anderen Prozesses verursachen. Wie gehe ich verantwortungsvoll mit diesen Userspace-Zeigern in meinem Treiber um?
Sind Ihnen die Funktionen 'copy_to_user' und 'copy_from_user' des Kernels bekannt? Wenn nicht, ist es Zeit, etwas über sie zu lernen. Denn der Zugriff (Lesen/Schreiben) des Benutzerspeichers sollte nur mit bestimmten Funktionen (und einigen Variationen davon) erfolgen. – Tsyvarev
Ich habe sie benutzt, aber mir war nicht bewusst, dass das alles ist. Das Schreiben, wo immer der Benutzer es mir sagt, ohne explizite Überprüfung meines Teiles, erschien ziemlich rücksichtslos :) – Fadeway
'copy_to_user' und' copy_from_user' machen grundlegende Überprüfungen und sie konnten die Kopie nicht beenden. –