kernel: fix pexit() Waitmsg memory leak.

when a process got forked with RFNOWAIT, its p->parent will still
point to the parent process, but its p->parentpid == 0.

this causes the "parent still alive" check in pexit to get confused
as it only checked p->pid == up->parentpid. this condition is *TRUE*
in the case of RFNOWAIT when the parent process is actually dead
(p->pid == 0) so we attached the wait structure to the dead parent
leaking the memory.
This commit is contained in:
cinap_lenrek 2013-12-07 05:38:31 +01:00
parent e2da074d28
commit 4fd55abb8e

View file

@ -1135,7 +1135,7 @@ pexit(char *exitstr, int freemem)
/*
* Check that parent is still alive.
*/
if(p->pid == up->parentpid && p->state != Broken) {
if(p->pid != 0 && p->pid == up->parentpid && p->state != Broken) {
p->nchild--;
p->time[TCUser] += utime;
p->time[TCSys] += stime;