Messages in this thread | | | Date | Tue, 11 May 2010 02:52:15 -0500 | From | "Serge E. Hallyn" <> | Subject | Re: [PATCH 1/4] INIT_TASK() should initialize ->thread_group list |
| |
Quoting Oleg Nesterov (oleg@redhat.com): > The trivial /sbin/init doing > > int main(void) > { > kill(0, SIGKILL) > } > > crashes the kernel. > > This happens because __kill_pgrp_info(init_struct_pid) also sends SIGKILL > to the swapper process which runs with the uninitialized ->thread_group. > > Change INIT_TASK() to initialize ->thread_group properly. > > Note: the real problem is that the swapper process must not be visible to > signals, see the next patch. But this change is right anyway and fixes > the crash. > > Reported-and-tested-by: Mathias Krause <mathias.krause@secunet.com> > Signed-off-by: Oleg Nesterov <oleg@redhat.com>
Acked-by: Serge E. Hallyn <serue@us.ibm.com>
> --- > > include/linux/init_task.h | 1 + > 1 file changed, 1 insertion(+) > > --- 34-rc1/include/linux/init_task.h~1_INIT_TASK_THREAD_GROUP 2010-05-10 19:44:19.000000000 +0200 > +++ 34-rc1/include/linux/init_task.h 2010-05-10 19:45:27.000000000 +0200 > @@ -172,6 +172,7 @@ extern struct cred init_cred; > [PIDTYPE_PGID] = INIT_PID_LINK(PIDTYPE_PGID), \ > [PIDTYPE_SID] = INIT_PID_LINK(PIDTYPE_SID), \ > }, \ > + .thread_group = LIST_HEAD_INIT(tsk.thread_group), \ > .dirties = INIT_PROP_LOCAL_SINGLE(dirties), \ > INIT_IDS \ > INIT_PERF_EVENTS(tsk) \
| |