2017-02-22 15 views
-1

私は混乱しています!copy_to/from_userとmalloc(ユーザスペース内)

私はchardevとの間でバッファを送受信するシンプルなchardevとユーザースペースアプリを持っています。これはioctl経由です。

malloc(ヒープ上)でバッファを割り当てるとき(ユーザ空間で)、ユーザ空間のアプリケーションにfree()またはカーネルパニックが発生することがあります。 そしていつもそれらの何かがあります。

しかし私が(スタック上BUFを割り当てる)alloca()malloc()を交換した場合、すべてが正常たびに動作します。

memset(buf, 0x42, buf_len)私はmalloc(コンパイラの最適化や書き込み時の遅延割り当て/コピーを避けるため)を呼び出した後にmemset(buf, 0x42, buf_len)を試しましたが、それは役に立ちません。

このような動作を教えてください。 mallocの問題は何ですか/何が間違っていますか?

+2

は、問題を特定するコードを実際に見る必要があります。 –

+0

バッファのオーバーフローや未定義の動作になる可能性があります。 –

+1

あなたのドライバはuserspaceによって解放された後にバッファにアクセスしようとします(ただし、適切な関数を使用するとカーネルパニックを起こさないはずです)。あなたのドライバは別のプロセスのコンテキストにあるときにユーザー空間に書き込もうとします。 – yeputons

答えて

0

ありがとうございました! 問題はユーザースペース側にありました(古典的なユーザースペースのメモリ破損の現象)。 したがって、カーネル空間< - >ユーザー空間通信でmallocされたバッファを使用することは安全です。

ちょうど、カーネルスペースにヒープにバッファを置く特別な規則があると思っていました。

関連する問題