From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-1.1 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,MAILING_LIST_MULTI,RCVD_IN_MSPIKE_H2 autolearn=ham autolearn_force=no version=3.4.4 Received: (qmail 19650 invoked from network); 12 Feb 2023 19:35:55 -0000 Received: from second.openwall.net (193.110.157.125) by inbox.vuxu.org with ESMTPUTF8; 12 Feb 2023 19:35:55 -0000 Received: (qmail 18161 invoked by uid 550); 12 Feb 2023 19:35:52 -0000 Mailing-List: contact musl-help@lists.openwall.com; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-ID: Reply-To: musl@lists.openwall.com Received: (qmail 18123 invoked from network); 12 Feb 2023 19:35:51 -0000 DKIM-Filter: OpenDKIM Filter v2.11.0 mail.ispras.ru 4F9A94076B42 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ispras.ru; s=default; t=1676230539; bh=X+6U8G7m089xhMWSWsodeDDDRiIjna1oOd3LZcexYrM=; h=Date:From:To:Subject:Reply-To:In-Reply-To:References:From; b=ncJBKHx3jaCH9FV2ba98RI27HekLwjLz4Bzj98tOfUbulne5oNZ2XNRRfABVjiej0 pei8jNkVBgq3uXjBpPnkViFxOuUahrHmGc5gkuUxbsmAedIjkE2M542FCyaRk8UMeh 8y7Dl6VjPU+BFLb6ZUxupiFaMyPCiLq2XgkNLXF0= MIME-Version: 1.0 Date: Sun, 12 Feb 2023 22:35:39 +0300 From: Alexey Izbyshev To: musl@lists.openwall.com Mail-Followup-To: musl@lists.openwall.com In-Reply-To: <0ca8c83af81250f74b609513409669b4@ispras.ru> References: <63c0897d647936c946268f5a967a5e4d@ispras.ru> <20230211150603.GI4163@brightrain.aerifal.cx> <20230211171338.GD1903@voyager> <2da3840a9345c0a810e9d93ab4f6bca7@ispras.ru> <20230211175948.GK4163@brightrain.aerifal.cx> <20230211183505.GL4163@brightrain.aerifal.cx> <20230211194950.GN4163@brightrain.aerifal.cx> <4408deeb62fe668bf720d3c6c8bedda2@ispras.ru> <20230212003158.GO4163@brightrain.aerifal.cx> <0ca8c83af81250f74b609513409669b4@ispras.ru> User-Agent: Roundcube Webmail/1.4.4 Message-ID: X-Sender: izbyshev@ispras.ru Content-Type: text/plain; charset=US-ASCII; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [musl] [PATCH] mq_notify: fix close/recv race on failure path On 2023-02-12 21:23, Alexey Izbyshev wrote: > On 2023-02-12 03:32, Rich Felker wrote: > diff --git a/src/mq/mq_notify.c b/src/mq/mq_notify.c > index a42888d2..8eac71ed 100644 > --- a/src/mq/mq_notify.c > +++ b/src/mq/mq_notify.c > @@ -10,6 +10,8 @@ > struct args { > sem_t sem; > int sock; > + mqd_t mqd; > + int err; > const struct sigevent *sev; > }; > > @@ -21,8 +23,21 @@ static void *start(void *p) > int s = args->sock; > void (*func)(union sigval) = args->sev->sigev_notify_function; > union sigval val = args->sev->sigev_value; > + struct sigevent sev2; > + static const char zeros[32]; > + int err = 0; > > + sev2.sigev_notify = SIGEV_THREAD; > + sev2.sigev_signo = s; > + sev2.sigev_value.sival_ptr = (void *)&zeros; > + > + err = 0; > > This assignment is redundant. > > Maybe this hunk could be simplified by getting rid of err and simply > doing "args->err = -__syscall(SYS_mq_notify, args->mqd, &sev2)". > Never mind, err is needed because we can't access args->err after sem_post. Alexey > Except for this nit, the patches look good to me, thanks! > > Alexey > > + if (syscall(SYS_mq_notify, args->mqd, &sev2) < 0) > + err = errno; > + args->err = err; > sem_post(&args->sem); > + if (err) return 0; > + > n = recv(s, buf, sizeof(buf), MSG_NOSIGNAL|MSG_WAITALL); > close(s); > if (n==sizeof buf && buf[sizeof buf - 1] == 1)