From owner-freebsd-stable@freebsd.org Fri Nov 27 17:03:53 2020 Return-Path: Delivered-To: freebsd-stable@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 215A44AC6D2 for ; Fri, 27 Nov 2020 17:03:53 +0000 (UTC) (envelope-from kostikbel@gmail.com) Received: from kib.kiev.ua (kib.kiev.ua [IPv6:2001:470:d5e7:1::1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4CjLZ057Dsz3lZn; Fri, 27 Nov 2020 17:03:52 +0000 (UTC) (envelope-from kostikbel@gmail.com) Received: from tom.home (kib@localhost [127.0.0.1]) by kib.kiev.ua (8.16.1/8.16.1) with ESMTPS id 0ARH3a35079232 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NO); Fri, 27 Nov 2020 19:03:39 +0200 (EET) (envelope-from kostikbel@gmail.com) DKIM-Filter: OpenDKIM Filter v2.10.3 kib.kiev.ua 0ARH3a35079232 Received: (from kostik@localhost) by tom.home (8.16.1/8.16.1/Submit) id 0ARH3aEa079231; Fri, 27 Nov 2020 19:03:36 +0200 (EET) (envelope-from kostikbel@gmail.com) X-Authentication-Warning: tom.home: kostik set sender to kostikbel@gmail.com using -f Date: Fri, 27 Nov 2020 19:03:36 +0200 From: Konstantin Belousov To: Lev Serebryakov Cc: FreeBSD Stable Subject: Re: 12-STABLE try to init thead-using libraries before threads and program crashes Message-ID: References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable In-Reply-To: X-Spam-Status: No, score=-1.0 required=5.0 tests=ALL_TRUSTED,BAYES_00, DKIM_ADSP_CUSTOM_MED,FORGED_GMAIL_RCVD,FREEMAIL_FROM, NML_ADSP_CUSTOM_MED autolearn=no autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on tom.home X-Rspamd-Queue-Id: 4CjLZ057Dsz3lZn X-Spamd-Bar: ---- Authentication-Results: mx1.freebsd.org; none X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[] X-BeenThere: freebsd-stable@freebsd.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Production branch of FreeBSD source code List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 27 Nov 2020 17:03:53 -0000 On Fri, Nov 27, 2020 at 06:03:13PM +0300, Lev Serebryakov wrote: >=20 > I have locally-built net/samba413 port on 12-STABLE (r367937) which cras= hes in library initialization code due to wrong library initialization orde= r: >=20 > (No debugging symbols found in /usr/local/bin/testparm) > (gdb) b _libpthread_init > Function "_libpthread_init" not defined. > Make breakpoint pending on future shared library load? (y or [n]) y > Breakpoint 1 (_libpthread_init) pending. > (gdb) run > Starting program: /usr/local/bin/testparm >=20 > Program received signal SIGSEGV, Segmentation fault. > thr_malloc_lock (curthread=3D0x801e077d0) at /usr/src/lib/libthr/thread/t= hr_malloc.c:66 > 66 curthread->locklevel++; > (gdb) bt > #0 thr_malloc_lock (curthread=3D0x801e077d0) at /usr/src/lib/libthr/thre= ad/thr_malloc.c:66 > #1 __thr_calloc (num=3D1, size=3D96) at /usr/src/lib/libthr/thread/thr_m= alloc.c:88 > #2 0x0000000801474843 in mutex_init (mutex=3D0x801072008, mutex_attr=3D<= optimized out>, calloc_cb=3D) at /usr/src/lib/libthr/thread/= thr_mutex.c:295 > #3 __Tthr_mutex_init (mutex=3D0x801072008, mutex_attr=3D)= at /usr/src/lib/libthr/thread/thr_mutex.c:395 > #4 0x00000008016d62fc in ?? () from /usr/local/lib/libgnutls.so.30 > #5 0x00000008016cfcb3 in ?? () from /usr/local/lib/libgnutls.so.30 > #6 0x00000008016d0077 in ?? () from /usr/local/lib/libgnutls.so.30 > #7 0x000000080103730d in objlist_call_init (list=3D, lock= state=3D) at /usr/src/libexec/rtld-elf/rtld.c:2823 > #8 0x000000080103603d in _rtld (sp=3D0x7fffffffeb58, exit_proc=3D0x7ffff= fffeb20, objp=3D0x7fffffffeb28) at /usr/src/libexec/rtld-elf/rtld.c:811 > #9 0x00000008010338c9 in rtld_start () at /usr/src/libexec/rtld-elf/amd6= 4/rtld_start.S:39 > #10 0x0000000000000000 in ?? () > (gdb) >=20 > Please note, that `_libpthread_init` HAS BEEN NOT CALLED before `_Tthr_m= utex_init`. >=20 > Looks like some corner-case problem in rtld? >=20 > Link command for this program is: >=20 > [3517/3660] Linking bin/default/source3/utils/testparm > runner ['cc', 'source3/utils/testparm.c.41.o', '-o/wrkdirs/usr/ports/net/= samba413/work/samba-4.13.1/bin/default/source3/utils/testparm', '-Wl,-Bstat= ic', '-Wl,-Bdynamic', '-L/wrkdirs/usr/ports/net/samba413/work/samba-4.13.1/= bin/default/source4/heimdal_build', '-L/wrkdirs/usr/ports/net/samba413/work= /samba-4.13.1/bin/default/source4/lib/events', '-L/wrkdirs/usr/ports/net/sa= mba413/work/samba-4.13.1/bin/default/lib/tdb_wrap', '-L/wrkdirs/usr/ports/n= et/samba413/work/samba-4.13.1/bin/default/libcli/security', '-L/wrkdirs/usr= /ports/net/samba413/work/samba-4.13.1/bin/default/librpc', '-L/wrkdirs/usr/= ports/net/samba413/work/samba-4.13.1/bin/default/libcli/registry', '-L/wrkd= irs/usr/ports/net/samba413/work/samba-4.13.1/bin/default/lib', '-L/wrkdirs/= usr/ports/net/samba413/work/samba-4.13.1/bin/default/lib/dbwrap', '-L/wrkdi= rs/usr/ports/net/samba413/work/samba-4.13.1/bin/default/lib/socket', '-L/wr= kdirs/usr/ports/net/samba413/work/samba-4.13.1/bin/default/lib/param', '-L/= wrkdirs/usr/ports/net/sam > ba413/work/samba-4.13.1/bin/default/lib/messaging', '-L/wrkdirs/usr/ports= /net/samba413/work/samba-4.13.1/bin/default/lib/util', '-L/wrkdirs/usr/port= s/net/samba413/work/samba-4.13.1/bin/default/libcli/util', '-L/wrkdirs/usr/= ports/net/samba413/work/samba-4.13.1/bin/default/lib/replace', '-L/wrkdirs/= usr/ports/net/samba413/work/samba-4.13.1/bin/default/source3', '-L/usr/loca= l/lib', '-L/usr/local/lib', '-L/usr/local/lib', '-L/usr/local/lib', '-L/usr= /local/lib', '-L/usr/local/lib', '-lpopt-samba3-samba4', '-lsmbconf', '-lre= place-samba4', '-lsamba-errors', '-lcmdline-contexts-samba4', '-lsamba-util= ', '-lsamba3-util-samba4', '-lmessages-dgm-samba4', '-lsys-rw-samba4', '-lm= essages-util-samba4', '-liov-buf-samba4', '-lsamba-hostconfig', '-lsocket-b= locking-samba4', '-linterfaces-samba4', '-ldbwrap-samba4', '-ltevent-util',= '-lsamba-sockets-samba4', '-lutil-reg-samba4', '-lutil-tdb-samba4', '-lndr= ', '-ltalloc-report-printf-samba4', '-lserver-id-db-samba4', '-lsamba-clust= er-support-samba4', '-lC > HARSET3-samba4', '-lsamba-security-samba4', '-lsmbd-s > him-samba4', '-lsamba-debug-samba4', '-lgenrand-samba4', '-ltime-basic-sa= mba4', '-lutil-setid-samba4', '-lmsghdr-samba4', '-lserver-role-samba4', '-= ltdb-wrap-samba4', '-levents-samba4', '-lndr-nbt', '-lroken-samba4', '-lexe= cinfo', '-ltevent', '-ltalloc', '-lpthread', '-lutil', '-lunwind-generic', = '-lunwind', '-liconv', '-lz', '-ltdb', '-lpopt', '-lgnutls', '-ltalloc', '-= fstack-protector-strong', '-L/usr/local/lib', '-pie', '-Wl,-z,relro,-z,now'= , '-Wl,-no-undefined', '-Wl,--export-dynamic'] >=20 libthr is cleanly linked too early, it should come after all consumers. Anyway, try this. diff --git a/lib/libthr/thread/thr_mutex.c b/lib/libthr/thread/thr_mutex.c index 57984ef6d0e..303386db7fe 100644 --- a/lib/libthr/thread/thr_mutex.c +++ b/lib/libthr/thread/thr_mutex.c @@ -384,6 +384,8 @@ __Tthr_mutex_init(pthread_mutex_t * __restrict mutex, struct pthread_mutex *pmtx; int ret; =20 + _thr_check_init(); + if (mutex_attr !=3D NULL) { ret =3D mutex_check_attr(*mutex_attr); if (ret !=3D 0)