web-dev-qa-db-ja.com

「execなしでvfork」を実行するプロセスは、どのようにして長い中断のないスリープ状態になるのでしょうか。

この回答 ユーザーはそれを提案します

通常、無停電スリープは長くは続かないはずですが、Windowsの場合と同様に、壊れたドライバーまたは壊れたユーザーペースプログラム(execなしのvfork)は、Dで永久にスリープすることになります。

ユーザースペースプログラムは、バグのないカーネルで実際にDにロックアップするにはどうすればよいですか?ユーザーモードが意図的にDに固執できるのは、ちょっとした脆弱性ですが...

5
Vi.

プロセスがvforkを呼び出すと、子が_exitまたはexecve(2つの許可された関数とexecveの親戚(execvpなど)。親はまだvfork呼び出しを実行しているため、状態Dになります。

子供がこのようなことをした場合(これは愚かですが有効です)、親は無期限に状態Dに留まり、子は無期限に状態Rに留まります。

if (!vfork()) while (1) {}