2016-04-15 2 views
1

私が知っている(カーネルスペースで動作している)プログラムが-EFAULTを返す原因となるいくつかのテストケースを実行しています。印刷されません。 動作または-EFAULT、Linuxカーネル

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(&currentArrayElement, &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); 

ブロックがトリガされた場合、最初は、それはEFAULTのように思える

が返されている「だけ返さEFAULTユーザーエラーからのコピー」以来、:ここでは、障害を返すコードです。しかし、関数を完全に終了するのではなく、最下部のデバッグ情報が出力されます。 EFAULTがあるかどうかは印刷されているようです。これは EFAULTの特質ですか?または私は何か間違っているのですか?

答えて

2

(コメントには長すぎる。)

returnは、あなたがそれは関係なく、パラメータのに期待するものでしょう。

私は、関数を複数回呼び出すと思います。初めてcopy from user errorが表示され、2回目にデバッグ情報が表示されます。

この理論をテストするには、上部に右にprintkを追加します。

関連する問題