From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mxout1.mail.janestreet.com (mxout1.mail.janestreet.com [38.105.200.78]) by sourceware.org (Postfix) with ESMTPS id 6E8AD385840F for ; Fri, 24 Feb 2023 18:00:24 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 6E8AD385840F Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=janestreet.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=janestreet.com Received: from mail-qv1-f69.google.com ([209.85.219.69]) by mxgoog2.mail.janestreet.com with esmtps (TLS1.3:TLS_AES_128_GCM_SHA256:128) (Exim 4.96) id 1pVcMp-0029l4-1w for libc-alpha@sourceware.org; Fri, 24 Feb 2023 13:00:23 -0500 Received: by mail-qv1-f69.google.com with SMTP id l13-20020ad44d0d000000b004c74bbb0affso7052965qvl.21 for ; Fri, 24 Feb 2023 10:00:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=janestreet.com; s=google; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=GwsYZAVG6CdeHZfzXRXi28kJRVXV3Zy68vM7GUoxGtE=; b=Kr7ZLgQ9FKZDQWsH3Gfb9JJ5U+BnGewAFqzY3atDBstP8OIBBaRkCqlbyHjd70iktI zNeBN5O/PkoIkVA20ZCwdPHQmHYvWtyCQpJmBySwKSNh0dxekCznXa7bf723s7XHngtz 8h1ijAJvRGDv/Or7QcZT1CU40hyNKiopWhz9E= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=GwsYZAVG6CdeHZfzXRXi28kJRVXV3Zy68vM7GUoxGtE=; b=ZDPgqKqfR3pYHsSbxAfnVuYwtk0bqnCP/X3uJYgvPJKbkPGfOIfuPSLrdd+pkY/o1r lQucDtFCDbO7KDTxU7wYAsTp6efTZ0EUs+lhXshcRwUVjoSer6hMJiZaMFtYGKgiBTtS u3MYDG40JCW/9mfCZSNrXxfhy2eEqoJ4x3p5KwGUfzpGPrkcaEBLlsj5aLKi3R6PT+g5 rDk4Pv9XDd1q2dP95JPt2MMNRvBqQtD1gNIya7HGBZy4pj1W1Iy7t/8FIdX7sGU83nyA aKL5Hi5yb4uA3s4mSGlIDh1Nly3yAwdkAnzIYholP/dyzLdjgmhCB/sUFxfCyCaxU9TJ t0pA== X-Gm-Message-State: AO0yUKVOfIq+NuOmZyOgcNtYRxhZXclEejSqfusFLBGF7T7ksAsOrSwg phDF1zXfSiUk8QlzTtDSeQR60TlDvOTDyKlAIdzMSSzSIj/F1pizNW1YpvuybhYvoAdKFenvQAj NWTqo2dvqDwEmTaPAkEEDEJY3ATTYcnWoRqyqyQbLA20= X-Received: by 2002:ac8:5713:0:b0:3bf:ac85:7d6 with SMTP id 19-20020ac85713000000b003bfac8507d6mr175634qtw.3.1677261623015; Fri, 24 Feb 2023 10:00:23 -0800 (PST) X-Google-Smtp-Source: AK7set8jN2h0fnaHIubV2giMEHfr+Cj2YHjnWhBxTPmHvHrQELP57CdeANsLI1pPRiEOKETxoMlZdhjw/t5B2XiOr8M= X-Received: by 2002:ac8:5713:0:b0:3bf:ac85:7d6 with SMTP id 19-20020ac85713000000b003bfac8507d6mr175616qtw.3.1677261622587; Fri, 24 Feb 2023 10:00:22 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Adam Yi Date: Sat, 25 Feb 2023 02:00:06 +0800 Message-ID: Subject: Re: [PATCH] posix: Fix system blocks SIGCHLD erroneously [BZ #30163] To: libc-alpha@sourceware.org Cc: adhemerval.zanella@linaro.org, Adam Yi Content-Type: multipart/mixed; boundary="0000000000003624b705f575e7c0" X-Spam-Status: No, score=-10.9 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,SPF_HELO_PASS,SPF_PASS,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: --0000000000003624b705f575e7c0 Content-Type: text/plain; charset="UTF-8" Looks like some spaces/tabs got mixed up in the email. Please use the attachment instead. On Sat, Feb 25, 2023 at 1:31 AM Adam Yi wrote: > > Fix bug that SIGCHLD is erroneously blocked forever in the following > scenario: > > 1. Thread A calls system but hasn't returned yet > 2. Thread B calls another system but returns > > SIGCHLD would be blocked forever in thread B after its system() returns, > even after the system() in thread A returns. > > Although POSIX does not require, glibc system implementation aims to be > thread and cancellation safe. This bug was introduced in > 5fb7fc96350575c9adb1316833e48ca11553be49 when we moved reverting signal > mask to happen when the last concurrently running system returns, > despite that signal mask is per thread. This commit reverts this logic > and adds a test. > --- > stdlib/tst-system.c | 27 +++++++++++++++++++++++++++ > support/shell-container.c | 10 ++++++++++ > sysdeps/posix/system.c | 6 +++--- > 3 files changed, 40 insertions(+), 3 deletions(-) > > diff --git a/stdlib/tst-system.c b/stdlib/tst-system.c > index 634acfe264..be95c2de44 100644 > --- a/stdlib/tst-system.c > +++ b/stdlib/tst-system.c > @@ -20,6 +20,8 @@ > #include > #include > #include > +#include > +#include > > #include > #include > @@ -71,6 +73,19 @@ call_system (void *closure) > } > } > > +static void * > +sleep_and_check_sigchld (void *seconds) > +{ > + char cmd[namemax]; > + sprintf(cmd, "sleep %" PRIdPTR, (intptr_t) seconds); > + TEST_COMPARE (system (cmd), 0); > + > + sigset_t blocked = {0}; > + TEST_COMPARE (sigprocmask (SIG_BLOCK, NULL, &blocked), 0); > + TEST_COMPARE (sigismember (&blocked, SIGCHLD), 0); > + return NULL; > +} > + > static int > do_test (void) > { > @@ -154,6 +169,18 @@ do_test (void) > xchmod (_PATH_BSHELL, st.st_mode); > } > > + { > + pthread_t long_sleep_thread, short_sleep_thread; > + > + TEST_COMPARE (pthread_create (&long_sleep_thread, NULL, > + sleep_and_check_sigchld, (void *) 2), 0); > + TEST_COMPARE (pthread_create (&short_sleep_thread, NULL, > + sleep_and_check_sigchld, (void *) 1), 0); > + > + TEST_COMPARE (pthread_join (short_sleep_thread, NULL), 0); > + TEST_COMPARE (pthread_join (long_sleep_thread, NULL), 0); > + } > + > TEST_COMPARE (system (""), 0); > > return 0; > diff --git a/support/shell-container.c b/support/shell-container.c > index e9ac9b6d04..083426550b 100644 > --- a/support/shell-container.c > +++ b/support/shell-container.c > @@ -171,6 +171,15 @@ kill_func (char **argv) > return 0; > } > > +/* Emulate the "/bin/sleep" command. Options are ignored. */ > +static int > +sleep_func (char **argv) > +{ > + int secs = atoi (argv[0]); > + sleep (secs); > + return 0; > +} > + > /* This is a list of all the built-in commands we understand. */ > static struct { > const char *name; > @@ -181,6 +190,7 @@ static struct { > { "cp", copy_func }, > { "exit", exit_func }, > { "kill", kill_func }, > + { "sleep", sleep_func }, > { NULL, NULL } > }; > > diff --git a/sysdeps/posix/system.c b/sysdeps/posix/system.c > index 2335a99184..d77720a625 100644 > --- a/sysdeps/posix/system.c > +++ b/sysdeps/posix/system.c > @@ -179,16 +179,16 @@ do_system (const char *line) > as if the shell had terminated using _exit(127). */ > status = W_EXITCODE (127, 0); > > + /* sigaction can not fail with SIGINT/SIGQUIT used with old > + disposition. Same applies for sigprocmask. */ > DO_LOCK (); > if (SUB_REF () == 0) > { > - /* sigaction can not fail with SIGINT/SIGQUIT used with old > - disposition. Same applies for sigprocmask. */ > __sigaction (SIGINT, &intr, NULL); > __sigaction (SIGQUIT, &quit, NULL); > - __sigprocmask (SIG_SETMASK, &omask, NULL); > } > DO_UNLOCK (); > + __sigprocmask (SIG_SETMASK, &omask, NULL); > > if (ret != 0) > __set_errno (ret); > -- > 2.31.1 --0000000000003624b705f575e7c0 Content-Type: text/x-patch; charset="US-ASCII"; name="0001-posix-Fix-system-blocks-SIGCHLD-erroneously-BZ-30163.patch" Content-Disposition: attachment; filename="0001-posix-Fix-system-blocks-SIGCHLD-erroneously-BZ-30163.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_leiu8yet0 RnJvbSA2N2M0Y2U5ZTkwOGJkOWExZmQ4MDFlY2VkODQxMDY2MWUyN2MwYTNkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBZGFtIFlpIDxheWlAamFuZXN0cmVldC5jb20+CkRhdGU6IEZy aSwgMjQgRmViIDIwMjMgMTA6Mjc6NDEgLTA1MDAKU3ViamVjdDogW1BBVENIXSBwb3NpeDogRml4 IHN5c3RlbSBibG9ja3MgU0lHQ0hMRCBlcnJvbmVvdXNseSBbQlogIzMwMTYzXQpUbzogbGliYy1h bHBoYUBzb3VyY2V3YXJlLm9yZwpDYzogYWRoZW1lcnZhbC56YW5lbGxhQGxpbmFyby5vcmcsCiAg ICBpQGFkYW15aS5jb20KCkZpeCBidWcgdGhhdCBTSUdDSExEIGlzIGVycm9uZW91c2x5IGJsb2Nr ZWQgZm9yZXZlciBpbiB0aGUgZm9sbG93aW5nCnNjZW5hcmlvOgoKMS4gVGhyZWFkIEEgY2FsbHMg c3lzdGVtIGJ1dCBoYXNuJ3QgcmV0dXJuZWQgeWV0CjIuIFRocmVhZCBCIGNhbGxzIGFub3RoZXIg c3lzdGVtIGJ1dCByZXR1cm5zCgpTSUdDSExEIHdvdWxkIGJlIGJsb2NrZWQgZm9yZXZlciBpbiB0 aHJlYWQgQiBhZnRlciBpdHMgc3lzdGVtKCkgcmV0dXJucywKZXZlbiBhZnRlciB0aGUgc3lzdGVt KCkgaW4gdGhyZWFkIEEgcmV0dXJucy4KCkFsdGhvdWdoIFBPU0lYIGRvZXMgbm90IHJlcXVpcmUs IGdsaWJjIHN5c3RlbSBpbXBsZW1lbnRhdGlvbiBhaW1zIHRvIGJlCnRocmVhZCBhbmQgY2FuY2Vs bGF0aW9uIHNhZmUuIFRoaXMgYnVnIHdhcyBpbnRyb2R1Y2VkIGluCjVmYjdmYzk2MzUwNTc1Yzlh ZGIxMzE2ODMzZTQ4Y2ExMTU1M2JlNDkgd2hlbiB3ZSBtb3ZlZCByZXZlcnRpbmcgc2lnbmFsCm1h c2sgdG8gaGFwcGVuIHdoZW4gdGhlIGxhc3QgY29uY3VycmVudGx5IHJ1bm5pbmcgc3lzdGVtIHJl dHVybnMsCmRlc3BpdGUgdGhhdCBzaWduYWwgbWFzayBpcyBwZXIgdGhyZWFkLiBUaGlzIGNvbW1p dCByZXZlcnRzIHRoaXMgbG9naWMKYW5kIGFkZHMgYSB0ZXN0LgotLS0KIHN0ZGxpYi90c3Qtc3lz dGVtLmMgICAgICAgfCAyNyArKysrKysrKysrKysrKysrKysrKysrKysrKysKIHN1cHBvcnQvc2hl bGwtY29udGFpbmVyLmMgfCAxMCArKysrKysrKysrCiBzeXNkZXBzL3Bvc2l4L3N5c3RlbS5jICAg IHwgIDYgKysrLS0tCiAzIGZpbGVzIGNoYW5nZWQsIDQwIGluc2VydGlvbnMoKyksIDMgZGVsZXRp b25zKC0pCgpkaWZmIC0tZ2l0IGEvc3RkbGliL3RzdC1zeXN0ZW0uYyBiL3N0ZGxpYi90c3Qtc3lz dGVtLmMKaW5kZXggNjM0YWNmZTI2NC4uYmU5NWMyZGU0NCAxMDA2NDQKLS0tIGEvc3RkbGliL3Rz dC1zeXN0ZW0uYworKysgYi9zdGRsaWIvdHN0LXN5c3RlbS5jCkBAIC0yMCw2ICsyMCw4IEBACiAj aW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8c2lnbmFsLmg+CiAjaW5jbHVkZSA8cGF0aHMu aD4KKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisjaW5jbHVkZSA8aW50dHlwZXMuaD4KIAogI2luY2x1 ZGUgPHN1cHBvcnQvY2FwdHVyZV9zdWJwcm9jZXNzLmg+CiAjaW5jbHVkZSA8c3VwcG9ydC9jaGVj ay5oPgpAQCAtNzEsNiArNzMsMTkgQEAgY2FsbF9zeXN0ZW0gKHZvaWQgKmNsb3N1cmUpCiAgICAg fQogfQogCitzdGF0aWMgdm9pZCAqCitzbGVlcF9hbmRfY2hlY2tfc2lnY2hsZCAodm9pZCAqc2Vj b25kcykKK3sKKyAgY2hhciBjbWRbbmFtZW1heF07CisgIHNwcmludGYoY21kLCAic2xlZXAgJSIg UFJJZFBUUiwgKGludHB0cl90KSBzZWNvbmRzKTsKKyAgVEVTVF9DT01QQVJFIChzeXN0ZW0gKGNt ZCksIDApOworCisgIHNpZ3NldF90IGJsb2NrZWQgPSB7MH07CisgIFRFU1RfQ09NUEFSRSAoc2ln cHJvY21hc2sgKFNJR19CTE9DSywgTlVMTCwgJmJsb2NrZWQpLCAwKTsKKyAgVEVTVF9DT01QQVJF IChzaWdpc21lbWJlciAoJmJsb2NrZWQsIFNJR0NITEQpLCAwKTsKKyAgcmV0dXJuIE5VTEw7Cit9 CisKIHN0YXRpYyBpbnQKIGRvX3Rlc3QgKHZvaWQpCiB7CkBAIC0xNTQsNiArMTY5LDE4IEBAIGRv X3Rlc3QgKHZvaWQpCiAgICAgeGNobW9kIChfUEFUSF9CU0hFTEwsIHN0LnN0X21vZGUpOwogICB9 CiAKKyAgeworICAgIHB0aHJlYWRfdCBsb25nX3NsZWVwX3RocmVhZCwgc2hvcnRfc2xlZXBfdGhy ZWFkOworCisgICAgVEVTVF9DT01QQVJFIChwdGhyZWFkX2NyZWF0ZSAoJmxvbmdfc2xlZXBfdGhy ZWFkLCBOVUxMLAorICAgICAgICAgICAgICAgICAgc2xlZXBfYW5kX2NoZWNrX3NpZ2NobGQsICh2 b2lkICopIDIpLCAwKTsKKyAgICBURVNUX0NPTVBBUkUgKHB0aHJlYWRfY3JlYXRlICgmc2hvcnRf c2xlZXBfdGhyZWFkLCBOVUxMLAorICAgICAgICAgICAgICAgICAgc2xlZXBfYW5kX2NoZWNrX3Np Z2NobGQsICh2b2lkICopIDEpLCAwKTsKKworICAgIFRFU1RfQ09NUEFSRSAocHRocmVhZF9qb2lu IChzaG9ydF9zbGVlcF90aHJlYWQsIE5VTEwpLCAwKTsKKyAgICBURVNUX0NPTVBBUkUgKHB0aHJl YWRfam9pbiAobG9uZ19zbGVlcF90aHJlYWQsIE5VTEwpLCAwKTsKKyAgfQorCiAgIFRFU1RfQ09N UEFSRSAoc3lzdGVtICgiIiksIDApOwogCiAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvc3VwcG9y dC9zaGVsbC1jb250YWluZXIuYyBiL3N1cHBvcnQvc2hlbGwtY29udGFpbmVyLmMKaW5kZXggZTlh YzliNmQwNC4uMDgzNDI2NTUwYiAxMDA2NDQKLS0tIGEvc3VwcG9ydC9zaGVsbC1jb250YWluZXIu YworKysgYi9zdXBwb3J0L3NoZWxsLWNvbnRhaW5lci5jCkBAIC0xNzEsNiArMTcxLDE1IEBAIGtp bGxfZnVuYyAoY2hhciAqKmFyZ3YpCiAgIHJldHVybiAwOwogfQogCisvKiBFbXVsYXRlIHRoZSAi L2Jpbi9zbGVlcCIgY29tbWFuZC4gIE9wdGlvbnMgYXJlIGlnbm9yZWQuICAqLworc3RhdGljIGlu dAorc2xlZXBfZnVuYyAoY2hhciAqKmFyZ3YpCit7CisgIGludCBzZWNzID0gYXRvaSAoYXJndlsw XSk7CisgIHNsZWVwIChzZWNzKTsKKyAgcmV0dXJuIDA7Cit9CisKIC8qIFRoaXMgaXMgYSBsaXN0 IG9mIGFsbCB0aGUgYnVpbHQtaW4gY29tbWFuZHMgd2UgdW5kZXJzdGFuZC4gICovCiBzdGF0aWMg c3RydWN0IHsKICAgY29uc3QgY2hhciAqbmFtZTsKQEAgLTE4MSw2ICsxOTAsNyBAQCBzdGF0aWMg c3RydWN0IHsKICAgeyAiY3AiLCBjb3B5X2Z1bmMgfSwKICAgeyAiZXhpdCIsIGV4aXRfZnVuYyB9 LAogICB7ICJraWxsIiwga2lsbF9mdW5jIH0sCisgIHsgInNsZWVwIiwgc2xlZXBfZnVuYyB9LAog ICB7IE5VTEwsIE5VTEwgfQogfTsKIApkaWZmIC0tZ2l0IGEvc3lzZGVwcy9wb3NpeC9zeXN0ZW0u YyBiL3N5c2RlcHMvcG9zaXgvc3lzdGVtLmMKaW5kZXggMjMzNWE5OTE4NC4uZDc3NzIwYTYyNSAx MDA2NDQKLS0tIGEvc3lzZGVwcy9wb3NpeC9zeXN0ZW0uYworKysgYi9zeXNkZXBzL3Bvc2l4L3N5 c3RlbS5jCkBAIC0xNzksMTYgKzE3OSwxNiBAQCBkb19zeXN0ZW0gKGNvbnN0IGNoYXIgKmxpbmUp CiAgICAgICBhcyBpZiB0aGUgc2hlbGwgaGFkIHRlcm1pbmF0ZWQgdXNpbmcgX2V4aXQoMTI3KS4g ICovCiAgICBzdGF0dXMgPSBXX0VYSVRDT0RFICgxMjcsIDApOwogCisgIC8qIHNpZ2FjdGlvbiBj YW4gbm90IGZhaWwgd2l0aCBTSUdJTlQvU0lHUVVJVCB1c2VkIHdpdGggb2xkCisgICAgIGRpc3Bv c2l0aW9uLiAgU2FtZSBhcHBsaWVzIGZvciBzaWdwcm9jbWFzay4gICovCiAgIERPX0xPQ0sgKCk7 CiAgIGlmIChTVUJfUkVGICgpID09IDApCiAgICAgewotICAgICAgLyogc2lnYWN0aW9uIGNhbiBu b3QgZmFpbCB3aXRoIFNJR0lOVC9TSUdRVUlUIHVzZWQgd2l0aCBvbGQKLQkgZGlzcG9zaXRpb24u ICBTYW1lIGFwcGxpZXMgZm9yIHNpZ3Byb2NtYXNrLiAgKi8KICAgICAgIF9fc2lnYWN0aW9uIChT SUdJTlQsICZpbnRyLCBOVUxMKTsKICAgICAgIF9fc2lnYWN0aW9uIChTSUdRVUlULCAmcXVpdCwg TlVMTCk7Ci0gICAgICBfX3NpZ3Byb2NtYXNrIChTSUdfU0VUTUFTSywgJm9tYXNrLCBOVUxMKTsK ICAgICB9CiAgIERPX1VOTE9DSyAoKTsKKyAgX19zaWdwcm9jbWFzayAoU0lHX1NFVE1BU0ssICZv bWFzaywgTlVMTCk7CiAKICAgaWYgKHJldCAhPSAwKQogICAgIF9fc2V0X2Vycm5vIChyZXQpOwot LSAKMi4zMS4xCgo= --0000000000003624b705f575e7c0--