lkml.org 
[lkml]   [2018]   [Jul]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    Date
    SubjectRe: [RFC][PATCH 11/11] signal: Ignore all but multi-process signals that come in during fork.
    Oleg Nesterov <oleg@redhat.com> writes:

    > On 07/11, Eric W. Biederman wrote:
    >>
    >> Oleg Nesterov <oleg@redhat.com> writes:
    >>
    >> >> - recalc_sigpending();
    >> >> - if (signal_pending(current)) {
    >> >> + if (read_seqcount_retry(&current->signal->multi_process_seq, seq) ||
    >> >> + fatal_signal_pending(current)) {
    >> >> retval = -ERESTARTNOINTR;
    >> >> goto bad_fork_cancel_cgroup;
    >> >
    >> > So once again, I think this is not right, see the discussion on
    >> > bugzilla.
    >>
    >> I am trying to dig through and understand your concerns. I am having
    >> difficulty understanding your concerns.
    >>
    >> Do the previous patches look good to you?
    >
    > Yes, yes, personally I like 1-10 after a quick glance. I'll try to read this
    > series carefully later, but I don't think I will find something really
    > wrong.

    Good. Then I will consider those acked by both you and Linus.

    Oleg do you mind if I add:
    Acked-by: Oleg Nesterov <oleg@redhat.com>

    To those patches?

    >> If I understand you correctly. Your concern is that since we added the:
    >>
    >> recalc_sigpending();
    >> if (signal_pending(current))
    >> return -ERESTARTNOINTR;
    >>
    >> Other (non-signal) code such as the freezer has come to depend upon that
    >> test. Changing the test in the proposed way will allow the new child to
    >> escape the freezer, as it is not guaranteed the new child will be
    >> frozen.
    >
    > Yes.


    >> It seems reasonable to look at other things that set TIF_SIGPENDING and
    >> see if any of them are broken by the fork changes.
    >
    > Again, please look at do_signal_stop(). If it was the source of signal_pending(),
    > copy_process() should fail. Or we should update the new thread to participate in
    > group-stop, but then we need to set TIF_SIGPENDING, copy the relevant part of
    > current->jobctl, and increment ->group_stop_count at least.

    Hmm. That is an interesting twist.

    In general for do_signal_stop is fine as long as we have the
    recalc_sigpending at the start of fork.

    But yes. What happens when it isn't a fork but it is a clone. Signals
    that affect the entire thread group (STOP CLONE) are very interesting
    from this perspective.

    Same issue as with fork, but different scope.

    Eric
    \
     
     \ /
      Last update: 2018-07-15 22:06    [W:4.280 / U:0.016 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site