Ich habe einige Testfälle ausgeführt, von denen ich weiß, dass sie dazu führen, dass mein Programm (im Kernel-Bereich ausgeführt) -EFAULT
zurückgibt. Hier ist der Code, der den Fehler zurückgibt:Behavior oder -EFAULT, Linux Kernel
for (index = 0; index < size; index++){
//copy_from_user checks to make sure input parameter is valid. Returns 0 on success
if(copy_from_user(¤tArrayElement, &data[index], sizeof(long))) {
printk("copy from user error \n");
return -EFAULT;
printk("copy from user error: just returned efault");
}
else {
//parameter is ok
if (currentArrayElement < kernelStats.min)
kernelStats.min = currentArrayElement;
if (currentArrayElement > kernelStats.max)
kernelStats.max = currentArrayElement;
kernelStats.sum += currentArrayElement;
}
}
//print debugging info
printk("Min: %ld Max: %ld Sum: %ld\n", kernelStats.min, kernelStats.max, kernelStats.sum);
Wenn der erste Block, wenn ausgelöst wird, scheint es, wie der EFAULT
zurückgegeben werden, da die „Kopie von Benutzerfehler: nur zurück efault“ druckt nicht. Anstatt jedoch die Funktion vollständig zu beenden, werden die Debugging-Informationen im unteren Bereich gedruckt. Es scheint zu drucken, ob es einen EFAULT
gibt oder nicht. Ist das eine Idiosynkrasie von EFAULT
? Oder mache ich etwas falsch?