[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <87601k5qg6.fsf@xmission.com>
Date: Thu, 12 Jul 2018 12:11:53 -0500
From: ebiederm@...ssion.com (Eric W. Biederman)
To: Oleg Nesterov <oleg@...hat.com>
Cc: Linus Torvalds <torvalds@...ux-foundation.org>,
Andrew Morton <akpm@...ux-foundation.org>,
linux-kernel@...r.kernel.org, Wen Yang <wen.yang99@....com.cn>,
majiang <ma.jiang@....com.cn>
Subject: Re: [RFC][PATCH 11/11] signal: Ignore all but multi-process signals that come in during fork.
Oleg Nesterov <oleg@...hat.com> writes:
> On 07/11, Eric W. Biederman wrote:
>>
>> Oleg Nesterov <oleg@...hat.com> writes:
>>
>> >> - recalc_sigpending();
>> >> - if (signal_pending(current)) {
>> >> + if (read_seqcount_retry(¤t->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@...hat.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
Powered by blists - more mailing lists