[systemd-devel] [PATCH] [Fix] Do not handle SIGKILL since we can not

Kok, Auke-jan H auke-jan.h.kok at intel.com
Mon May 20 10:37:36 PDT 2013


On Mon, May 20, 2013 at 12:22 AM, Chengwei Yang <chengwei.yang at intel.com> wrote:
> This is a minor fix because it's not a major issue, this fix just avoid
> to get EINVAL error from sigaction(2).
>
> There are two signals can not handled at user space, SIGKILL and
> SIGSTOP even we're PID 1, trying to handle these two signals will get
> EINVAL error.
>
> There are two kinds of systemd instance, running as system manager or
> user session manager, apparently, the latter is a general user space
> process which can not handle SIGKILL. The special pid 1 also can not
> do that refer to kernel/signal.c:do_sigaction().
>
> However, pid 1 is unkillable because the kernel did attach
> SIGNAL_UNKILLABLE to it at system boot up, refer to
> init/main.c:start_kernel()
>     --> rest_init()
>         --> kernel_thread()
>             --> kernel_init()
>                 --> init_post()
>                     current->signal->flags |= SIGNAL_UNKILLABLE
>
> Signed-off-by: Chengwei Yang <chengwei.yang at intel.com>
> ---
>  src/core/main.c  |    1 -
>  src/shared/def.h |    2 +-
>  2 files changed, 1 insertion(+), 2 deletions(-)
>
> diff --git a/src/core/main.c b/src/core/main.c
> index 7fc06be..8059f6a 100644
> --- a/src/core/main.c
> +++ b/src/core/main.c
> @@ -1408,7 +1408,6 @@ int main(int argc, char *argv[]) {
>          /* Reset all signal handlers. */
>          assert_se(reset_all_signal_handlers() == 0);
>
> -        /* If we are init, we can block sigkill. Yay. */
>          ignore_signals(SIGNALS_IGNORE, -1);
>
>          if (parse_config_file() < 0)
> diff --git a/src/shared/def.h b/src/shared/def.h
> index 5ba170f..5abb544 100644
> --- a/src/shared/def.h
> +++ b/src/shared/def.h
> @@ -32,4 +32,4 @@
>  #define SYSTEMD_CGROUP_CONTROLLER "name=systemd"
>
>  #define SIGNALS_CRASH_HANDLER SIGSEGV,SIGILL,SIGFPE,SIGBUS,SIGQUIT,SIGABRT
> -#define SIGNALS_IGNORE SIGKILL,SIGPIPE
> +#define SIGNALS_IGNORE SIGPIPE

Ok, looks fine to me. Was there an error printed by user sessions?

Auke


More information about the systemd-devel mailing list