NetBSD Problem Report #56877

From root@netbsd.org  Sat Jun 11 07:54:35 2022
Return-Path: <root@netbsd.org>
Received: from mail.netbsd.org (mail.netbsd.org [199.233.217.200])
	(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits))
	(Client CN "mail.NetBSD.org", Issuer "mail.NetBSD.org CA" (not verified))
	by mollari.NetBSD.org (Postfix) with ESMTPS id 7DCD61A923C
	for <gnats-bugs@gnats.NetBSD.org>; Sat, 11 Jun 2022 07:54:35 +0000 (UTC)
Message-Id: <20220611075433.CB65420C38@victory.netbsd.org>
Date: Sat, 11 Jun 2022 07:54:33 +0000 (UTC)
From: mlelstv@netbsd.org
Reply-To: mlelstv@netbsd.org
To: gnats-bugs@NetBSD.org
Subject: vlc build crashes in gnutls
X-Send-Pr-Version: 3.95

>Number:         56877
>Category:       pkg
>Synopsis:       vlc build crashes in gnutls
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    pkg-manager
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Sat Jun 11 07:55:00 +0000 2022
>Originator:     Michael van Elst
>Release:        NetBSD 9.2_STABLE
>Organization:

>Environment:


System: NetBSD victory.netbsd.org 9.2_STABLE NetBSD 9.2_STABLE (GENERIC64) #16: Fri Jan 21 02:56:58 CET 2022 mlelstv@gossam:/home/netbsd9/obj.evbarm64-el/home/netbsd9/src/sys/arch/evbarm/compile/GENERIC64 evbarm
Architecture: aarch64
Machine: evbarm
>Description:
Building vlc-3.0.17.4 from pkgsrc-HEAD fails with:

gmake[2]: *** [Makefile:1840: ../modules/plugins.dat] Bus error (core dumped)
gmake[2]: Leaving directory '/pbulk/work/multimedia/vlc/work/vlc-3.0.17.4/bin'

This is the vlc-cache-gen tool that crashes:

Core was generated by `vlc-cache-gen'.
Program terminated with signal SIGBUS, Bus error.
#0  0x0000fd0bb784f9a4 in _gnutls_rnd_deinit ()
   from /pbulk/work/multimedia/vlc/work/.buildlink/lib/libgnutls.so.30
#1  0x0000fd0bb783eea4 in _gnutls_global_deinit ()
   from /pbulk/work/multimedia/vlc/work/.buildlink/lib/libgnutls.so.30
#2  0x0000fffff6d52c0c in _rtld_call_fini_functions () from /usr/libexec/ld.elf_so
#3  0x0000fffff6d53290 in _rtld_unload_object.part.8 () from /usr/libexec/ld.elf_so
#4  0x0000fffff6d53898 in dlclose () from /usr/libexec/ld.elf_so
#5  0x0000fd0bb8880f34 in ?? ()
   from /pbulk/work/multimedia/vlc/work/vlc-3.0.17.4/src/.libs/libvlccore.so.9
#6  0x0000fd0bb88695f4 in libvlc_InternalCleanup ()
   from /pbulk/work/multimedia/vlc/work/vlc-3.0.17.4/src/.libs/libvlccore.so.9
#7  0x0000fd0bb8979050 in libvlc_release ()
   from /pbulk/work/multimedia/vlc/work/vlc-3.0.17.4/lib/.libs/libvlc.so.5
#8  0x000000000b0610f8 in main ()

(gdb) print $pc
$1 = (void (*)()) 0xfd0bb784f9a4 <_gnutls_rnd_deinit+148>

   0xfd0bb784f98c <_gnutls_rnd_deinit+124>: mrs     x1, tpidr_el0
   0xfd0bb784f990 <_gnutls_rnd_deinit+128>: 
    adrp      x0, 0xfd0bb79fa000 <nettle_curve25519_mul@got.plt>
   0xfd0bb784f994 <_gnutls_rnd_deinit+132>: ldr     x2, [x0, #3928]
   0xfd0bb784f998 <_gnutls_rnd_deinit+136>: add     x0, x0, #0xf58
   0xfd0bb784f99c <_gnutls_rnd_deinit+140>: blr     x2
   0xfd0bb784f9a0 <_gnutls_rnd_deinit+144>: ldr     x21, [sp, #32]
=> 0xfd0bb784f9a4 <_gnutls_rnd_deinit+148>: str     wzr, [x1, x0]
   0xfd0bb784f9a8 <_gnutls_rnd_deinit+152>: ldp     x29, x30, [sp], #64
   0xfd0bb784f9ac <_gnutls_rnd_deinit+156>: 
    b 0xfd0bb7935470 <_rnd_system_entropy_deinit>

x0             0x69667860b7c4d875  7594890178402244725
x1             0xfd0bb89aa000      278226783608832
x2             0xfffff6d50bcc      281474822900684
The coredump shows tpidr = 0x0000fd0bb89aa000

(gdb) x/i $x2
   0xfffff6d50bcc <_rtld_tlsdesc_dynamic>:  stp     x1, x2, [sp, #-32]!

That's the store before calling _rnd_system_entropy_deinit:

void _gnutls_rnd_deinit(void)
{  
        if (_gnutls_rnd_ops.deinit != NULL) {
                struct rnd_ctx_list_st *e = head, *next;

                while(e != NULL) {
                        next = e->next;
                        _gnutls_rnd_ops.deinit(e->ctx);
                        gnutls_free(e);
                        e = next;
                }
                head = NULL;
        }

        rnd_initialized = 0;                           <-----------------
        _rnd_system_entropy_deinit();

        return;
}

The variable is defined as:

random.c:static _Thread_local unsigned rnd_initialized = 0;


So that might be a RTLD issue.


>How-To-Repeat:
Build vlc from pkgsrc-HEAD.
>Fix:


>Unformatted:

NetBSD Home
NetBSD PR Database Search

(Contact us) $NetBSD: query-full-pr,v 1.46 2020/01/03 16:35:01 leot Exp $
$NetBSD: gnats_config.sh,v 1.9 2014/08/02 14:16:04 spz Exp $
Copyright © 1994-2020 The NetBSD Foundation, Inc. ALL RIGHTS RESERVED.