Re: [PATCH 4.20 11/50] signal: Always notice exiting tasks
From: Jiri Slaby
Date: Sun Feb 24 2019 - 13:25:58 EST
On 19. 02. 19, 10:07, Greg Kroah-Hartman wrote:
> On Tue, Feb 19, 2019 at 07:23:41AM +0100, Jiri Slaby wrote:
>> On 13. 02. 19, 19:38, Greg Kroah-Hartman wrote:
>>> 4.20-stable review patch. If anyone has any objections, please let me know.
>>>
>>> ------------------
>>>
>>> From: Eric W. Biederman <ebiederm@xxxxxxxxxxxx>
>>>
>>> commit 35634ffa1751b6efd8cf75010b509dcb0263e29b upstream.
>>>
>>> Recently syzkaller was able to create unkillablle processes by
>>> creating a timer that is delivered as a thread local signal on SIGHUP,
>>> and receiving SIGHUP SA_NODEFERER. Ultimately causing a loop
>>> failing to deliver SIGHUP but always trying.
>>>
>>> Upon examination it turns out part of the problem is actually most of
>>> the solution. Since 2.5 signal delivery has found all fatal signals,
>>> marked the signal group for death, and queued SIGKILL in every threads
>>> thread queue relying on signal->group_exit_code to preserve the
>>> information of which was the actual fatal signal.
>>>
>>> The conversion of all fatal signals to SIGKILL results in the
>>> synchronous signal heuristic in next_signal kicking in and preferring
>>> SIGHUP to SIGKILL. Which is especially problematic as all
>>> fatal signals have already been transformed into SIGKILL.
>>>
>>> Instead of dequeueing signals and depending upon SIGKILL to
>>> be the first signal dequeued, first test if the signal group
>>> has already been marked for death. This guarantees that
>>> nothing in the signal queue can prevent a process that needs
>>> to exit from exiting.
>>>
>>> Cc: stable@xxxxxxxxxxxxxxx
>>> Tested-by: Dmitry Vyukov <dvyukov@xxxxxxxxxx>
>>> Reported-by: Dmitry Vyukov <dvyukov@xxxxxxxxxx>
>>> Ref: ebf5ebe31d2c ("[PATCH] signal-fixes-2.5.59-A4")
>>> History Tree: https://git.kernel.org/pub/scm/linux/kernel/git/tglx/history.git
>>> Signed-off-by: "Eric W. Biederman" <ebiederm@xxxxxxxxxxxx>
>>> Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>
>>
>> This patch breaks strace self-tests in 4.20.9. In particular,
>> "threads-execve":
>> https://github.com/strace/strace/blob/master/tests/threads-execve.c
>> https://github.com/strace/strace/blob/master/tests/threads-execve.test
>>
>> The test received some fix a day ago, but it did not help in this case:
>> https://github.com/strace/strace/commit/2a50278b9
>>
>> Only a revert of the above patch helped.
>>
>> I don't know if the strace's test is broken (which is quite usual in
>> cases like these) or the patch affects some user-visible behaviour --
>> e.g. could this be a reason for sh failures in the build farm?
>>
>> Any ideas?
>
> Does cf43a757fd49 ("signal: Restore the stop PTRACE_EVENT_EXIT") help
> with this? It's queued up for the next round of stable releases and is
> in Linus's tree.
Yes, confirmed.
thanks,
--
js