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=-3.3 required=5.0 tests=HTML_MESSAGE, MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL autolearn=ham autolearn_force=no version=3.4.4 Received: (qmail 19942 invoked from network); 20 Jan 2022 02:20:10 -0000 Received: from mother.openwall.net (195.42.179.200) by inbox.vuxu.org with ESMTPUTF8; 20 Jan 2022 02:20:10 -0000 Received: (qmail 31761 invoked by uid 550); 20 Jan 2022 02:20:07 -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 30701 invoked from network); 20 Jan 2022 02:20:05 -0000 From: "zhaohang (F)" To: "musl@lists.openwall.com" CC: "zhangwentao (M)" Thread-Topic: [musl] Re:[musl] Re:Re: [musl] [pthread] pthread_barrier_wait invalid case Thread-Index: AQHX8pE8jj6Fgie77U2El3fVwvEBE6w05r6AgAFSqQCAM+TIgIABRIsw Date: Thu, 20 Jan 2022 02:19:51 +0000 Message-ID: References: <57cc3430.7783.17dc3d9431a.Coremail.zuotingyang@126.com> <20211216181600.GN7074@brightrain.aerifal.cx> <14675e48.759d.17dc8cb1e6c.Coremail.zuotingyang@126.com> <46a7e83e.68ba.17e72d6b0aa.Coremail.zuotingyang@126.com> In-Reply-To: <46a7e83e.68ba.17e72d6b0aa.Coremail.zuotingyang@126.com> Accept-Language: zh-CN, en-US Content-Language: zh-CN X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.174.176.241] Content-Type: multipart/alternative; boundary="_000_e2a129d122ee48b2b061fa0d3f89474ahuaweicom_" MIME-Version: 1.0 X-CFilter-Loop: Reflected Subject: =?gb2312?B?tPC4tDogW211c2xdIFJlOlttdXNsXSBSZTpSZTogW211c2xdIFtwdGhyZWFk?= =?gb2312?B?XSBwdGhyZWFkX2JhcnJpZXJfd2FpdCAgaW52YWxpZCBjYXNl?= --_000_e2a129d122ee48b2b061fa0d3f89474ahuaweicom_ Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: base64 TWF5YmUgdGhlIGZvbGxvd2luZyBwYXRjaCBjYW4gc29sdmUgdGhpcyBsYWNraW5nIGlzc3VlDQoN CmRpZmYgLS1naXQgYS9zcmMvdGltZS90aW1lcl9jcmVhdGUuYyBiL3NyYy90aW1lL3RpbWVyX2Ny ZWF0ZS5jDQppbmRleCAwYTI5ZjA1YzIuLmRjZDI0ZmRjYyAxMDA2NDQNCi0tLSBhL3NyYy90aW1l L3RpbWVyX2NyZWF0ZS5jDQorKysgYi9zcmMvdGltZS90aW1lcl9jcmVhdGUuYw0KQEAgLTEwMyw2 ICsxMDMsMTAgQEAgc3RhdGljIHZvaWQgKnN0YXJ0KHZvaWQgKmFyZykNCiAgICAgICAgdW5pb24g c2lndmFsIHZhbCA9IGFyZ3MtPnNldi0+c2lnZXZfdmFsdWU7DQoNCiAgICAgICAgX19jaGlsZF9z eW5jKCZhcmdzLT5iKTsNCisNCisgICAgICAgaWYgKHNlbGYtPnRpbWVyX2lkIDwgMCkNCisgICAg ICAgICAgICAgICByZXR1cm4gMDsNCisNCiAgICAgICAgZm9yICg7Oykgew0KICAgICAgICAgICAg ICAgIHNpZ2luZm9fdCBzaTsNCiAgICAgICAgICAgICAgICB3aGlsZSAoc2lnd2FpdGluZm8oU0lH VElNRVJfU0VULCAmc2kpIDwgMCk7DQoNCreivP7IyzogenVvdGluYSBbbWFpbHRvOnp1b3Rpbmd5 YW5nQDEyNi5jb21dDQq3osvNyrG85DogMjAyMsTqMdTCMTnI1SAyMjo1Ng0KytW8/sjLOiBtdXNs QGxpc3RzLm9wZW53YWxsLmNvbQ0K1vfM4jogW211c2xdIFJlOlttdXNsXSBSZTpSZTogW211c2xd IFtwdGhyZWFkXSBwdGhyZWFkX2JhcnJpZXJfd2FpdCBpbnZhbGlkIGNhc2UNCg0KDQpIaSBUZWFt LA0KU2ltcGxlIGZlZWRiYWNrIG9uIHRoaXMgaXNzdWUNCkZpcnN0LCAgcmVwbGFjZSBwdGhyZWFk X2JhcnJpZXJfd2FpdCBpbiB0aW1lcl9jcmVhdGUgd2l0aCBhIGN1c3RvbSBzeW5jIGZ1bmN0aW9u IChpbXBsZW1lbnRlZCBieSBfX3dhaXQsIF9fd2FrZSksDQp0aGVuIHRoZSBwcm9ibGVtIG9mIHBh bmljIGlzIHNvbHZlZA0KQnV0IEkgc3RpbGwgdGhpbmsgdGhlIGJlc3Qgd2F5IGlzIGZpeGluZyBw dGhyZWFkX2JhcnJpZXJfd2FpdC4NCg0KSW4gYWRkaXRpb24sIGl0IGlzIGFsc28gdGhlIHByb2Js ZW0gb2YgdGhlIHRpbWVyX2NyZWF0ZSBmdW5jdGlvbi4gQ29udGludWUgdG8gYXNrIGZvciBhZHZp Y2UuDQpgYGBjDQp0aW1lcl9jcmVhdGU6DQpjYXNlIFNJR0VWX1RIUkVBRDoNCnIgPSBwdGhyZWFk X2NyZWF0ZSgmdGQsICZhdHRyLCBzdGFydCwgJmFyZ3MpOw0KICAgIC4uLg0KaWYgKHN5c2NhbGwo U1lTX3RpbWVyX2NyZWF0ZSwgY2xrLCAma3NldiwgJnRpbWVyaWQpIDwgMCkNCnRpbWVyaWQgPSAt MTsNCmBgYA0KSWYgdGhpcyBzeXNjYWxsIGZhaWxzLCB0aGUgJ3N0YXJ0JyB0aHJlYWQgd2lsbCBy ZXNpZGUgcGVybWFuZW50bHksDQpzbyB0aGUgYWJvdmUgb25seSBzZXRzIHRpbWVyaWQgPSAtMSwg d2hpY2ggc2hvdWxkIG5vdCBiZSBwZXJmZWN0ID8NCmBgYGMNCnN0YXJ0Og0KZm9yICg7Oykgew0K d2hpbGUgKHNpZ3dhaXRpbmZvKFNJR1RJTUVSX1NFVCwgJnNpKSA8IDApOw0KfQ0KDQpgYGANCg0K DQoNCg0KDQpBdCAyMDIxLTEyLTE3IDIyOjI4OjE0LCAienVvdGluYSIgPHp1b3Rpbmd5YW5nQDEy Ni5jb208bWFpbHRvOnp1b3Rpbmd5YW5nQDEyNi5jb20+PiB3cm90ZToNCg0KQXQgMjAyMS0xMi0x NyAwMjoxNjowNywgIlJpY2ggRmVsa2VyIiA8ZGFsaWFzQGxpYmMub3JnPG1haWx0bzpkYWxpYXNA bGliYy5vcmc+PiB3cm90ZToNCg0KPk9uIFRodSwgRGVjIDE2LCAyMDIxIGF0IDExOjI1OjM1UE0g KzA4MDAsIHp1b3RpbmEgd3JvdGU6DQoNCj4+IEhpIGV2ZXJyb25lDQoNCj4+DQoNCj4+DQoNCj4+ IEkgZW5jb3VudGVyZWQgYSBwYW5pYyBwcm9ibGVtIHdoZW4gdXNpbmcgdGltZXJfY3JlYXRlIHJl Y2VudGx5Lg0KDQo+PiBBbHRob3VnaCB0aGUgcHJvYmFiaWxpdHkgaXMgc21hbGwsIGl0IHN0aWxs IGhhcHBlbmVkLg0KDQo+PiBGaW5hbHkgSSBmb3VuZCB0aGVyZSBpcyBhIHByb2JsZW0gaW4gdGhl IGNvZGUgb2YgcGh0cmVhZF9iYXJyaWVyX3dhaXQsDQoNCj4+IGFuZCByZXZpZXcgY29kZSBmb3Vu ZCB0aGF0IHRoZXJlIG1heSBiZSBwcm9ibGVtcyBpbiB0aGUgZm9sbG93aW5nIHBsYWNlLA0KDQo+ PiA4MSAgYV9zdG9yZSgmYi0+X2JfbG9jaywgMCk7DQoNCj4+IDgyICBpZiAoYi0+X2Jfd2FpdGVy cykgX193YWtlKCZiLT5fYl9sb2NrLCAxLCAxKTsNCg0KPj4gSWYgc2NoZWR1bGluZyBvY2N1cnMg YmV0d2VlbiBsaW5lcyA4MSBhbmQgODIsIGl0IHdpbGwgYmUgbm90IGdvb2QuDQoNCj4+IFNvIEkg ZGlkIGFuIGV4cGVyaW1lbnQgYW5kIG1vZGlmaWVkIHRoZSBzb3VyY2UgY29kZSBvZiBwdGhyZWFk X2JhcnJpZXJfd2FpdCB0byB2ZXJpZnkgbXkgZ3Vlc3MNCg0KPj4gYGBgYw0KDQo+PiA4MSAgYV9z dG9yZSgmYi0+X2JfbG9jaywgMCk7DQoNCj4+ICAgICAgICAgICAgICAgICAgLyogSWYgaXQgaXMg c2NoZWR1bGVkIG91dCBoZXJlLCB3aGVuIGFub3RoZXIgdGhyZWFkIGV4ZWN1dGVzIHB0aHJlYWRf YmFycmllcl93YWl0IGFnYWluLA0KDQo+PiAgICAgICAgICAgICAgICAgICAgIGl0IGNhbiBnbyB0 aHJvdWdoIHRoZSBlbnRpcmUgZnVuY3Rpb24gaGFwcGlseSwgdGhhdCBpcywgaXQgd2lsbCBub3Qg YmUgYmxvY2tlZCAqLw0KDQo+PiAgICAgICBzeXNjYWxsKHlpbGVkKTsgLy8gbmV3IGFkZCBmb3Ig dGVzdA0KDQo+PiAgICAgICAgICAgICAgICAvLyBXaGVuIHRoZSBkaXNwYXRjaCBjb21lcyBiYWNr LCB0aGlzIGIgaGFzIGJlZW4gcmVsZWFzZWQNCg0KPj4gODIgIGlmIChiLT5fYl93YWl0ZXJzKSBf X3dha2UoJmItPl9iX2xvY2ssIDEsIDEpOw0KDQo+PiBgYGANCg0KPg0KDQo+VGhlIGludGVudCBo ZXJlIGlzIHRoYXQgaXQncyBub3QgcG9zc2libGUgdGhhdCBiIGhhcyBiZWVuIHJlbGVhc2VkLA0K DQo+YmVjYXVzZSBhbGwgd2FpdGVycyBoYXZlIHRvIHN5bmNocm9uaXplIG9uIGItPl9iX2luc3Qu IEl0J3MgcG9zc2libGUNCg0KPnRoZXJlJ3MgYSBidWcgaGVyZS4gSSdsbCBsb29rLiBXaGF0IGFy Y2ggYXJlIHlvdSBydW5uaW5nIG9uPw0KDQogcnVubmluZyBvbiBhYXJjaDY0Lg0KDQogTG9va2lu ZyBmb3J3YXJkIHRvIGZpeCwgdGhhbmsgeW91DQoNCj4+IEhlcmUgaXMgYW4gZXhhbXBsZSBvZiB0 aW1lcl9jcmVhdGUgKHNyYy90aW1lL3RpbWVyX2NyZWF0ZS5jKQ0KDQo+PiBUaGVyZSBhcmUgdHdv IHRocmVhZHMgQSBhbmQgQiBjYWxsIHB0aHJlYWRfYmFycmllcl93YWl0Lg0KDQo+PiBUaGUgY2Fs bCBpcyBhcyBmb2xsb3dzDQoNCj4+IEEgdGhyZWFkOiAodGltZXJfY3JlYXRlIC8vIHBhcmVudCB0 aHJlYWQpDQoNCj4+IHsNCg0KPj4gICAgICAgIC4uLi4uDQoNCj4+ICAgICAgIC8vIG5ldyBhZGQg Zm9yIHRlc3QtLS1iZWdpbg0KDQo+PiAgICAgICAgd2hpbGUoYi0+X2JfaW5zdCA9PSBOVUxMKSB7 DQoNCj4+ICAgICAgICAgICAgICAgICBzeXNjYWxsKHlpZWxkKTsNCg0KPj4gICAgICAgIH0NCg0K Pj4gICAgICAvLyBuZXcgYWRkIGZvciB0ZXN0LS0tZW5kDQoNCj4+ICAgICAgcHRocmVhZF9iYXJy aWVyX3dhaXQoKTsNCg0KPj4gfQ0KDQo+PiBCIHRocmVhZDogKHN0YXJ0IC8vIGNoaWxkIHRocmVh ZCkNCg0KPj4gew0KDQo+PiAgICAgICAgLi4uLi4NCg0KPj4gICAgICAgLy8gIEVuc3VyZSB0aGF0 IHRoaXMgZnVuY3Rpb24gaXMgYWR2YW5jZWQgdG8gdGhlIGlmICghaW5zdCkge30gYnJhbmNoIG9m IGJhcnJpZXJfd2FpdA0KDQo+PiAgICAgICBwdGhyZWFkX2JhcnJpZXJfd2FpdCgpOw0KDQo+PiB9 DQoNCj4+DQoNCj4+DQoNCj4+IEluIHNob3J0LCB0aGUgcmVhc29uIGZvciBwYW5pYyBpcyB0aGF0 IHB0aHJlYWRfYmFycmllcl93YWl0IGlzIG5vdCBibG9ja2VkIGFzIGV4cGVjdGVkOw0KDQo+PiBJ IGhvcGUgeW91IGhlbHAgdG8gY29uZmlybSB3aGV0aGVyIHRoZXJlIGlzIGEgcHJvYmxlbSB3aXRo IHRoZSBpbXBsZW1lbnRhdGlvbg0KDQo+PiBvZiBwdGhyZWFkX2JhcnJpZXJfd2FpdCBvciBhbSBJ IHdyb25nPw0KDQo+Pg0KDQo+Pg0KDQo+PiBMb29raW5nIGZvcndhcmQgdG8geW91ciByZXBseS4g VGhhbmsgeW91Lg0KDQo+DQoNCj5UaGFua3MgZm9yIHRoZSByZXBvcnQuDQoNCj4NCg0KPlJpY2gN Cg0KDQoNCg0KDQoNCg== --_000_e2a129d122ee48b2b061fa0d3f89474ahuaweicom_ Content-Type: text/html; charset="gb2312" Content-Transfer-Encoding: quoted-printable

Maybe the following pa= tch can solve this lacking issue

 

diff --git a/src/time/= timer_create.c b/src/time/timer_create.c

index 0a29f05c2..dcd24= fdcc 100644

--- a/src/time/timer_c= reate.c

+++ b/src/= time/timer_create.c

@@ -103,6 +103,10 = @@ static void *start(void *arg)

   &nbs= p;    union sigval val =3D args->sev->sigev_value;

 

   &nbs= p;    __child_sync(&args->b);

+

+   = ;    if (self->timer_id < 0)

+   = ;            return = 0;

+

   &nbs= p;    for (;;) {

   &nbs= p;            siginf= o_t si;

   &nbs= p;            while = (sigwaitinfo(SIGTIMER_SET, &si) < 0);

 

=B7=A2=BC=FE=C8=CB: zuotina [mailt= o:zuotingyang@126.com]
=B7=A2=CB=CD=CA=B1=BC=E4:<= /span> 2022=C4=EA1=D4=C219=C8=D5 22:56
=CA=D5=BC=FE=C8=CB: musl@lists.openwall.com
=D6=F7=CC=E2: [musl] Re:[musl] Re:Re: [musl] [pthread] pthread_barrier_wait invalid cas= e

 

 

Hi Team,=

Simple feedback on this is= sue

First,  replace pthre= ad_barrier_wait in timer_create with a custom sync function (implemented by= __wait, __wake),

then the problem of panic = is solved

But I still think the best= way is fixing pthread_barrier_wait. 

 

In addition, it is also th= e problem of the timer_create function. Continue to ask for advice.

```c

timer_create:

case SIGEV_THREAD:

r =3D pthread_create(&= td, &attr, start, &args);

    ...

if (syscall(SYS_timer_crea= te, clk, &ksev, &timerid) < 0)

timerid =3D -1;=

```

If this syscall fails, the= 'start' thread will reside permanently, 

so the above only sets tim= erid =3D -1, which should not be perfect ?

```c

start:

for (;;) {

while (sigwaitinfo(SIGTIME= R_SET, &si) < 0);

}

```=

 

 

At 2021-12-17 22:28:14, "zuotina" &l= t;zuotingyang@126.com> wrote:=

At = 2021-12-17 02:16:07, "Rich Felker" <dalias@libc.org> wrote:

>On Thu, Dec 16, 2021 at=
 11:25:35PM +0800, zuotina wrote:
>> Hi everrone
>> =
>> =
>> I encountered a pa=
nic problem when using timer_create recently.
>> Although the proba=
bility is small, it still happened.
>> Finaly I found the=
re is a problem in the code of phtread_barrier_wait, 
>> and review code fo=
und that there may be problems in the following place, 
>> 81  a_store(&=
amp;b->_b_lock, 0);
>> 82  if (b->=
;_b_waiters) __wake(&b->_b_lock, 1, 1);
>> If scheduling occu=
rs between lines 81 and 82, it will be not good.
>> So I did an experi=
ment and modified the source code of pthread_barrier_wait to verify my gues=
s
>> ```c
>> 81  a_store(&=
amp;b->_b_lock, 0);
>>   &=
nbsp;           &nbs=
p;  /* If it is scheduled out here, when another thread executes pthre=
ad_barrier_wait again, 
>>   &=
nbsp;           &nbs=
p;     it can go through the entire function happily, t=
hat is, it will not be blocked */
>>   &=
nbsp;   syscall(yiled); // new add for test
>>   &=
nbsp;            // =
When the dispatch comes back, this b has been released
>> 82  if (b->=
;_b_waiters) __wake(&b->_b_lock, 1, 1);
>> ```
> 
>The intent here is that=
 it's not possible that b has been released,
>because all waiters hav=
e to synchronize on b->_b_inst. It's possible
>there's a bug here. I'l=
l look. What arch are you running on?
 running on aarch64. <=
/o:p>
 Looking forward to fi=
x, thank you
>> Here is an example=
 of timer_create (src/time/timer_create.c)
>> There are two thre=
ads A and B call pthread_barrier_wait. 
>> The call is as fol=
lows
>> A thread: (timer_c=
reate // parent thread)
>> {
>>   &=
nbsp;    .....
>>   &=
nbsp;   // new add for test---begin
>>   &=
nbsp;    while(b->_b_inst =3D=3D NULL) {
>>   &=
nbsp;           &nbs=
p; syscall(yield);
>>   &=
nbsp;    }
>>   &=
nbsp;  // new add for test---end
>>   &=
nbsp;  pthread_barrier_wait();
>> }
>> B thread: (start /=
/ child thread)
>> {
>>   &=
nbsp;    .....
>>   &=
nbsp;   //  Ensure that this function is advanced to the if =
(!inst) {} branch of barrier_wait
>>   &=
nbsp;   pthread_barrier_wait();
>> }
>> =
>> =
>> In short, the reas=
on for panic is that pthread_barrier_wait is not blocked as expected;<=
/o:p>
>> I hope you help to=
 confirm whether there is a problem with the implementation 
>> of pthread_barrier=
_wait or am I wrong?
>> =
>> =
>> Looking forward to=
 your reply. Thank you. 
> 
>Thanks for the report.<=
o:p>
> 
>Rich<=
/pre>

 

 

=  

 

--_000_e2a129d122ee48b2b061fa0d3f89474ahuaweicom_--