Como pode processar fazer “vfork sem exec” acabar em um longo sono ininterrupto?

5

Em esta resposta sugere que

Normally, Uninterruptible sleep should not last long, but as under windows, broken drivers or broken userpace programs (vfork without exec) can end up sleeping in D forever.

Como o programa userspace pode realmente travar em D em um kernel sem bugs? Eu acho que é uma espécie de pequena vulnerabilidade para que o usermode seja capaz de ficar preso em D de propósito ...

    
por Vi. 19.09.2014 / 00:20

1 resposta

6

Quando um processo chama vfork , o pai permanece no estado D, desde que o filho não tenha executado _exit ou execve (as duas únicas funções autorizadas, juntamente com execve como parentesexecvp, etc.). O pai ainda está executando a chamada vfork , então está no estado D.

Se a criança fizer algo assim (o que é estúpido, mas válido), o pai permanecerá no estado D indefinidamente, enquanto o filho permanecerá no estado R indefinidamente.

if (!vfork()) while (1) {}
    
por 19.09.2014 / 00:29