sorry again for delay...

On 02/07, Eric W. Biederman wrote:
>
> --- a/kernel/signal.c
> +++ b/kernel/signal.c
> @@ -2393,6 +2393,11 @@ bool get_signal(struct ksignal *ksig)
>               goto relock;
>       }
>  
> +     /* Has this task already been marked for death? */
> +     ksig->info.si_signo = signr = SIGKILL;
> +     if (signal_group_exit(signal))
> +             goto fatal;
> +
>       for (;;) {
>               struct k_sigaction *ka;
>  
> @@ -2488,6 +2493,7 @@ bool get_signal(struct ksignal *ksig)
>                       continue;
>               }
>  
> +     fatal:
>               spin_unlock_irq(&sighand->siglock);

Eric, but this is wrong. At least this is the serious user-visible change.

Afaics, with this patch the tracee will never stop in PTRACE_EVENT_EXIT in case
of group_exit/exec, because schedule() in TASK_TRACED state won't block due to
__fatal_signal_pending().

Yes, yes, as I said many times the semantics of PTRACE_EVENT_EXIT was never 
really
defined, it depends on /dev/random, but still I don't think we should break it 
even
more.

Oleg.

Reply via email to