[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#25624: [PATCH] timeout: Fix signal race in SIGALRM handling
From: |
Pádraig Brady |
Subject: |
bug#25624: [PATCH] timeout: Fix signal race in SIGALRM handling |
Date: |
Sun, 5 Feb 2017 18:13:47 -0800 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.2.0 |
On 05/02/17 10:50, Tobias Stoeckmann wrote:
> {
> pid_t wait_result;
> + sigset_t old_set;
> int status;
>
> + /* We configure timers below so that SIGALRM is sent on expiry.
> + Therefore ensure we don't inherit a mask blocking SIGALRM. */
> + unblock_signal (SIGALRM);
cool
> settimeout (timeout, true);
>
> - while ((wait_result = waitpid (monitored_pid, &status, 0)) < 0
> - && errno == EINTR)
> - continue;
> + block_signal (SIGALRM, &old_set);
SIGALRM isn't the only signal causing this race?
If a SIGTERM etc. is sent to the timeout process during the race,
cleanup() will be called with the same consequences.
Don't we need to block all signals for the cleanup() handler?
> + while ((wait_result = waitpid (monitored_pid, &status, WNOHANG)) == 0)
> + sigsuspend (&old_set);
> + monitored_pid = 0;
> + unblock_signal (SIGALRM);
There doesn't seem to be much point in re-enabling SIGALRM (or other signals)
here,
as if it does fire it means we'll return 143 rather than the correct 124.
Since the child is reaped, we can just proceed and process the exit status
of the child and exit() I think.
cheers,
Pádraig.
- bug#25624: [PATCH] timeout: Fix signal race in SIGALRM handling, Tobias Stoeckmann, 2017/02/05
- bug#25624: [PATCH] timeout: Fix signal race in SIGALRM handling, Pádraig Brady, 2017/02/05
- bug#25624: [PATCH] timeout: Fix signal race in SIGALRM handling, Paul Eggert, 2017/02/05
- bug#25624: [PATCH] timeout: Fix signal race in SIGALRM handling, Tobias Stoeckmann, 2017/02/05
- bug#25624: [PATCH] timeout: Fix signal race in SIGALRM handling, Tobias Stoeckmann, 2017/02/05
- bug#25624: [PATCH] timeout: Fix signal race in SIGALRM handling,
Pádraig Brady <=
- bug#25624: [PATCH] timeout: Fix signal race in SIGALRM handling, Tobias Stoeckmann, 2017/02/09
- bug#25624: [PATCH] timeout: Fix signal race in SIGALRM handling, Pádraig Brady, 2017/02/10
- bug#25624: [PATCH] timeout: Fix signal race in SIGALRM handling, Pádraig Brady, 2017/02/10