Verkettete Liste in den Kernel schicken
-
Hi,
Ich habe folgendes Problem: Ich lese im userspace Daten aus einem file in eine verkettete Liste ein. Das ganze soll dann an ein Kernelmodul übergeben werden. Folgende (relevante) Codeabschnitte habe ich mir dazu einfallen lassen:
//Userspace:
...struct profile *final; //eigene Struktur für verkettete Liste
struct ifreq reqf;...
final = read_input_data(file_name); //Wird korrekt eingelesen
...
strcpy(reqf.ifr_name, file_name);
reqf.ifr_data = (caddr_t)final;//Kernelspace, laufendes module:
...struct ifreq *ifrf = NULL;
struct profile final,
*uptrf = (struct profile *)ifrf->ifr_data;
final = (struct profile)kmalloc(sizeof(struct profile), GFP_ATOMIC);if (copy_from_user(final, uptrf, sizeof(&final)))
{
printk("Bad handover!\n");
return -EFAULT;
}//Dann Testausgabe final, soweit kommt es aber nicht
Es lässt sich alles fehlerfrei kompilieren, leider kommt es dann aber zu einem Speicherzugriffsfehler! Das Modul lässt sich dann auch nicht mehr aus dem Kernel entfernen.
Ich weiß dass es an dieser Übergabe liegen muss, da es vorher mit den ursprünglichen Funktionalitäten bestens funktioniert hat.
Leider kenne ich mich auch zuwenig damit aus, diesen Typ der Übergabe habe ich im Ansatz aus einem anderen Programm übernommen.
Fällt dazu jemandem was ein? Würde mir super helfen!Viele Grüße
Christian
-
Vermutlich liegt es daran, dass du nur ein Element kopierst. Du müsstest aber jeden Pointer kopieren.
btw. den Rückgabewert von malloc zu casten ist pfui!