Hallo,
ich möchte mittels coppy_from_user eine Memory Area in einen Kernel Buffer kopieren.
Zuerst hole ich mir einen Zeiger auf eine vm_area_struct. Anschließen übeprüfe ich den Adressbereich mittels access_ok. Danach versuche ich die Kopieraktion durchzuführen.
Die Funktion copy_from_user gibt aber immer einen Fehler zurück.
Kann mir jemand sagen, unter welchen Bedingungen copy_from_user fehlschlägt ?
Insbesondere wenn der Adressbereich zuvor mittels access_ok getestet wurde. Auserdem bin ich bisher davon ausgegangen, der Adressbereich (vma->end - vma->start) einer vm_area_struct grundsätzlich gültig ist.
Vielen Dank und Grüße
Armin
ich möchte mittels coppy_from_user eine Memory Area in einen Kernel Buffer kopieren.
Code:
struct vm_area_struct *vma= find_vma(addr);
if (!vma)
return addr;
unsigned long segment_start=vma->vm_start;
unsigned long segment_ende= vma->vm_end;
unsigned long segment_size= segment_ende - segment_start;
if (access_ok(VERIFY_READ,(void*)segment_start, segment_size) == 0){
printk("Speicherbereich nicht gültig\n");
goto out1;
}else{
printk("Speicherbereich gültig\n");
}
if ((error=copy_from_user( segment_buffer, (void*)segment_start, segment_size))){
printk ("Fehler copy_from_user error:%d);
error=ERROR;
goto out1;
}
Zuerst hole ich mir einen Zeiger auf eine vm_area_struct. Anschließen übeprüfe ich den Adressbereich mittels access_ok. Danach versuche ich die Kopieraktion durchzuführen.
Die Funktion copy_from_user gibt aber immer einen Fehler zurück.
Kann mir jemand sagen, unter welchen Bedingungen copy_from_user fehlschlägt ?
Insbesondere wenn der Adressbereich zuvor mittels access_ok getestet wurde. Auserdem bin ich bisher davon ausgegangen, der Adressbereich (vma->end - vma->start) einer vm_area_struct grundsätzlich gültig ist.
Vielen Dank und Grüße
Armin