All of lore.kernel.org
 help / color / mirror / Atom feed
* [RFC][PATCH 0/6][v3] Container-init signal semantics
@ 2008-12-21  0:51 Sukadev Bhattiprolu
  2008-12-21  0:52 ` [RFC][PATCH 1/6][v3] Remove 'handler' parameter to tracehook functions Sukadev Bhattiprolu
                   ` (7 more replies)
  0 siblings, 8 replies; 33+ messages in thread
From: Sukadev Bhattiprolu @ 2008-12-21  0:51 UTC (permalink / raw)
  To: oleg, ebiederm, roland, bastian
  Cc: daniel, xemul, containers, linux-kernel, sukadev


Container-init must behave like global-init to processes within the
container and hence it must be immune to unhandled fatal signals from
within the container (i.e SIG_DFL signals that terminate the process).

But the same container-init must behave like a normal process to 
processes in ancestor namespaces and so if it receives the same fatal
signal from a process in ancestor namespace, the signal must be
processed.

Implementing these semantics requires that send_signal() determine pid
namespace of the sender but since signals can originate from workqueues/
interrupt-handlers, determining pid namespace of sender may not always
be possible or safe.

Changelog[v3]:
	Changes based on discussions of previous version:
		http://lkml.org/lkml/2008/11/25/458

	Major changes:

	- Define SIGNAL_UNKILLABLE_FROM_NS and use in container-inits to
	  skip fatal signals from same namespace but process SIGKILL/SIGSTOP
	  from ancestor namespace.
	- Use SI_FROMUSER() and si_code != SI_ASYNCIO to determine if
	  it is safe to dereference pid-namespace of caller. Highly
	  experimental :-)
	- Masquerading si_pid when crossing namespace boundary: relevant
	  patches merged in -mm and dropped from this set.

	Minor changes:

	- Remove 'handler' parameter to tracehook functions
	- Update sig_ignored() to drop SIG_DFL signals to global init early
	  (tried to address Roland's  and Oleg's comments)
	- Use 'same_ns' flag to drop SIGKILL/SIGSTOP to cinit from same
	  namespace

This patchset implements the design/simplified semantics suggested by
Oleg Nesterov.  The simplified semantics for container-init are:

	- container-init must never be terminated by a signal from a
	  descendant process.

	- container-init must never be immune to SIGKILL from an ancestor
	  namespace (so a process in parent namespace must always be able
	  to terminate a descendant container).

	- container-init may be immune to unhandled fatal signals (like
	  SIGUSR1) even if they are from ancestor namespace (SIGKILL is
	  the only reliable signal from ancestor namespace).

Patches in this set:

	[PATCH 1/6] Remove 'handler' parameter to tracehook functions
	[PATCH 2/6] Protect init from unwanted signals more
	[PATCH 3/6] Define/set SIGNAL_UNKILLABLE_FROM_NS
	[PATCH 4/6] Define siginfo_from_ancestor_ns()
	[PATCH 5/6] Protect cinit from unblocked SIG_DFL signals
	[PATCH 6/6] Protect cinit from blocked fatal signals

TODO:
	- Use sig_task_unkillable() in fs/proc/array.c:task_sig() to
	  correctly report ignored signals for container/global init.
	- Make SI_ASYNCIO a kernel signal ?
	- Compile/touch tested. Need so real testing ;-)

Limitations/side-effects of current design

	- Container-init is immune to suicide - kill(getpid(), SIGKILL) is
	  ignored. Use exit() :-)

^ permalink raw reply	[flat|nested] 33+ messages in thread

end of thread, other threads:[~2008-12-23 19:31 UTC | newest]

Thread overview: 33+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-12-21  0:51 [RFC][PATCH 0/6][v3] Container-init signal semantics Sukadev Bhattiprolu
2008-12-21  0:52 ` [RFC][PATCH 1/6][v3] Remove 'handler' parameter to tracehook functions Sukadev Bhattiprolu
2008-12-23 19:30   ` Roland McGrath
2008-12-21  0:53 ` [RFC][PATCH 2/6][v3] Protect init from unwanted signals more Sukadev Bhattiprolu
     [not found]   ` <20081221005319.GB5025-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2008-12-23 19:31     ` Roland McGrath
2008-12-23 19:31       ` Roland McGrath
     [not found] ` <20081221005106.GA4912-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2008-12-21  0:53   ` [RFC][PATCH 3/6][v3] Define/set SIGNAL_UNKILLABLE_FROM_NS Sukadev Bhattiprolu
2008-12-21  0:53     ` Sukadev Bhattiprolu
2008-12-21  0:54 ` [RFC][PATCH 4/6][v3] Define siginfo_from_ancestor_ns() Sukadev Bhattiprolu
2008-12-22 22:26   ` Oleg Nesterov
     [not found]     ` <20081222222604.GA1536-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2008-12-22 23:01       ` Oleg Nesterov
2008-12-22 23:01         ` Oleg Nesterov
2008-12-22 23:58         ` Sukadev Bhattiprolu
2008-12-23  0:22           ` Oleg Nesterov
     [not found]             ` <20081223002215.GA7984-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2008-12-23  0:32               ` Eric W. Biederman
2008-12-23  0:32                 ` Eric W. Biederman
2008-12-23  4:47                 ` Sukadev Bhattiprolu
2008-12-22 23:45     ` Sukadev Bhattiprolu
2008-12-22 23:54       ` Oleg Nesterov
2008-12-21  0:54 ` [RFC][PATCH 5/6][v3] Protect cinit from unblocked SIG_DFL signals Sukadev Bhattiprolu
2008-12-22 22:46   ` Oleg Nesterov
2008-12-21  0:55 ` [RFC][PATCH 6/6][v3] Protect cinit from blocked fatal signals Sukadev Bhattiprolu
     [not found]   ` <20081221005529.GF5025-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2008-12-22 22:58     ` Oleg Nesterov
2008-12-22 22:58       ` Oleg Nesterov
2008-12-22 23:38       ` Sukadev Bhattiprolu
     [not found]         ` <20081222233855.GA13079-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2008-12-23  0:03           ` Oleg Nesterov
2008-12-23  0:03             ` Oleg Nesterov
2008-12-22 10:55 ` [RFC][PATCH 0/6][v3] Container-init signal semantics Eric W. Biederman
2008-12-22 19:47   ` Sukadev Bhattiprolu
     [not found]     ` <20081222194737.GC9085-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2008-12-23  0:27       ` Eric W. Biederman
2008-12-23  0:27         ` Eric W. Biederman
2008-12-23  2:12         ` Sukadev Bhattiprolu
2008-12-23 16:51 ` Serge E. Hallyn

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.