Re: [PATCH 2/3] pidhash: don't use zero pids

From: Eric W. Biederman
Date: Mon Jan 30 2006 - 17:43:02 EST


Oleg Nesterov <oleg@xxxxxxxxxx> writes:

> daemonize() calls set_special_pids(1,1), while init and
> kernel threads spawned from init/main.c:init() run with
> 0,0 special pids. This patch changes INIT_SIGNALS() so
> that that they run with ->pgrp == ->session == 1 also.
>
> This patch relies on fact that swapper's pid == 1.

Looking more closely this appears to be a bug fix plain
and simple, and as the bug has existed for so long without
out anyone noticing it should not be a problem to fix it.

/sbin/init has been calling setsid() forever to ensure
it has a session and a process group of 1. daemonize
using these ids and then being called before /sbin/init
called setsid, caused setsid to fail as the process group
already existed.

The only symptom I have noticed is that job control does
not work in 2.6 when you specify init=/bin/bash. And I didn't
realized until I looked back at some older kernels that setsid
would have worked and they would not have had this problem.

If there ever was a reason we wanted to have processes that were
not part of process groups and sessions that reasons seems
lost in the mists of time and we can just forget about it.

/sbin/init does not test the return value of setsid() so
we should have no problems whatsoever.

Acked-by: Eric W. Biederman <ebiederm@xxxxxxxxxxxx>

> Signed-off-by: Oleg Nesterov <oleg@xxxxxxxxxx>
>
> --- RC-1/include/linux/init_task.h~ZEROPID 2005-11-22 19:35:52.000000000 +0300
> +++ RC-1/include/linux/init_task.h 2006-01-30 15:12:46.000000000 +0300
> @@ -62,6 +62,8 @@
> .posix_timers = LIST_HEAD_INIT(sig.posix_timers), \
> .cpu_timers = INIT_CPU_TIMERS(sig.cpu_timers), \
> .rlim = INIT_RLIMITS, \
> + .pgrp = 1, \
> + .session = 1, \
> }
>
> #define INIT_SIGHAND(sighand) { \
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/