Hi, I had tested with PTHREAD_DIAGASSERT however it did not produce any output.
I am building current and pkgsrc packages from scratch now. I will reply my situation after this rebuild. Thank you. On February 3, 2020 7:23:33 AM GMT+09:00, Kamil Rytarowski <n...@gmx.com> wrote: >Hello, > >I've checked with NetBSD-current from today (2020-02-02) and >pkgsrc-current (2020-02-02) and package firefox-72.0.2. > >I'm not reproducing any crash due to pthread_equal(3) misuse. >Everything >I tested, worked for me. > >Please try PTHREAD_DIAGASSERT=ae and debug the culprit crash with a >core(5) file. > >On 01.02.2020 22:20, Kamil Rytarowski wrote: >> Good idea. It could be checked quicker... however I presume that >> t1->pt_magic + t1->pt_magic already crash on invalid t1/t2 pointers >as >> the argument with condition is evaluated. >> >> Ryo, you might check: >> $ export PTHREAD_DIAGASSERT=ae >> $ firefox >> >> It should create a coredump for investigation. >> >> According to POSIX >> >(https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_equal.html) >> passing invalid parameters is UB. >> >> GLIBC, Illumos and all other BSDs (+ older NetBSD) have no sanity >check >> in pthread_equal(3). Apparently we are the first ones to notice the >bug. >> >> On 01.02.2020 21:18, Andrew Doran wrote: >>> Hmm. Was there not originally an environment variable to control >this >>> behaviour, since many applications are buggy? >>> >>> Andrew >>> >>> On Sun, Feb 02, 2020 at 01:01:49AM +0900, Ryo ONODERA wrote: >>>> Hi, >>>> >>>> pthread__error()s in pthread_equal() cause segfault >>>> during start of pkgsrc/www/firefox-72.0.2. >>>> >>>> Without pthread__error()s, www/firefox works fine >>>> like as follows. >>>> However I have no idea why I get segfaults. >>>> >>>> Could you take a look at this problem? >>>> >>>> Index: lib/libpthread/pthread.c >>>> =================================================================== >>>> RCS file: /cvsroot/src/lib/libpthread/pthread.c,v >>>> retrieving revision 1.162 >>>> diff -u -r1.162 pthread.c >>>> --- lib/libpthread/pthread.c 29 Jan 2020 17:11:57 -0000 1.162 >>>> +++ lib/libpthread/pthread.c 1 Feb 2020 15:58:03 -0000 >>>> @@ -770,11 +770,13 @@ >>>> if (__predict_false(__uselibcstub)) >>>> return __libc_thr_equal_stub(t1, t2); >>>> >>>> +#if 0 >>>> pthread__error(EINVAL, "Invalid thread", >>>> t1->pt_magic == PT_MAGIC); >>>> >>>> pthread__error(EINVAL, "Invalid thread", >>>> t2->pt_magic == PT_MAGIC); >>>> +#endif >>>> >>>> /* Nothing special here. */ >>>> return (t1 == t2); >>>> @@ -1108,7 +1110,7 @@ >>>> { >>>> char buf[1024]; >>>> size_t len; >>>> - >>>> + >>>> if (pthread__diagassert == 0) >>>> return; >>>> >>>> >>>> >>>> "Kamil Rytarowski" <ka...@netbsd.org> writes: >>>> >>>>> Module Name: src >>>>> Committed By: kamil >>>>> Date: Wed Jan 29 16:03:44 UTC 2020 >>>>> >>>>> Modified Files: >>>>> src/lib/libpthread: pthread.c pthread_getcpuclockid.c >>>>> >>>>> Log Message: >>>>> Chack thread->pt_magic with PT_MAGIC promptly >>>>> >>>>> Rearrange some checks to avoid verifying pthread_t after using it. >>>>> >>>>> >>>>> To generate a diff of this commit: >>>>> cvs rdiff -u -r1.160 -r1.161 src/lib/libpthread/pthread.c >>>>> cvs rdiff -u -r1.2 -r1.3 >src/lib/libpthread/pthread_getcpuclockid.c >>>>> >>>>> Please note that diffs are not public domain; they are subject to >the >>>>> copyright notices on the relevant files. >>>>> >>>> >>>> -- >>>> Ryo ONODERA // r...@tetera.org >>>> PGP fingerprint = 82A2 DC91 76E0 A10A 8ABB FD1B F404 27FA C7D1 >15F3 >> >> -- Ryo ONODERA // r...@tetera.org PGP fingerprint = 82A2 DC91 76E0 A10A 8ABB FD1B F404 27FA C7D1 15F3