:http://www.kernel.org/doc/htmldocs/kernel-hacking.html#routines-copyこの機能は "眠る"ことができます。Linuxカーネルのcopy_ [to/from] _user()のロック
この機能を使用する場合、または例外が発生する場合は常にロックする必要がありますか(たとえば、mutexなど)
私は現在、モジュールで作業していて、自分のシステムでいくつかのKernel Oopsを見ましたが、それらを再現することはできません。私は現在、copy_ [to/from] _user()の周りにロックしていないので、彼らが解雇されたと感じています。たぶん私は間違っていますが、それはそれと関係があるようなにおいがします。
私のようなものがあります:
static unsigned char user_buffer[BUFFER_SIZE];
static ssize_t mcom_write (struct file *file, const char *buf, size_t length, loff_t *offset) {
ssize_t retval;
size_t writeCount = (length < BUFFER_SIZE) ? length : BUFFER_SIZE;
memset((void*)&user_buffer, 0x00, sizeof user_buffer);
if (copy_from_user((void*)&user_buffer, buf, writeCount)) {
retval = -EFAULT;
return retval;
}
*offset += writeCount;
retval = writeCount;
cleanupNewline(user_buffer);
dispatch(user_buffer);
return retval;
}
は、これがそうすることを保存したり、copy_from_userが実行されている間、私は、他のアクセスからそれをロックする必要があるんですか?
これは読み書き元のcharデバイスです。ネットワーク内の特別なパケットが受信された場合、このバッファに同時にアクセスすることができます。
こんにちは、ありがとう、私はあなたが何を意味していると思う、上記の私のコードを見て、これは大丈夫ですか教えてください、私はちょうどローカルバッファに書き込みます。ですから、もし私が正しいなら、私のcopy_from_usersがデータ構造へのアクセス権を持っている限り、他の読み取り/書き込みからバッファを保護する必要があります。 – evildead
@evildead:バッファは静的なので、離れていく心配はありませんが、他のカーネルコードがそのバッファに同時にアクセスできる場合は、バッファが矛盾していないことを確認するためにロックする必要があります状態。 – caf
清算のためのthx – evildead