GNU bug report logs - #38041
crypto with gnutls aka nettle (libhogweed) and scm_realloc

Previous Next

Package: guile;

Reported by: linasvepstas <at> gmail.com

Date: Sun, 3 Nov 2019 01:12:01 UTC

Severity: normal

To reply to this bug, email your comments to 38041 AT debbugs.gnu.org.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to bug-guile <at> gnu.org:
bug#38041; Package guile. (Sun, 03 Nov 2019 01:12:01 GMT) Full text and rfc822 format available.

Acknowledgement sent to linasvepstas <at> gmail.com:
New bug report received and forwarded. Copy sent to bug-guile <at> gnu.org. (Sun, 03 Nov 2019 01:12:01 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Linas Vepstas <linasvepstas <at> gmail.com>
To: bug-guile <at> gnu.org
Subject: crypto with gnutls aka nettle (libhogweed) and scm_realloc
Date: Sat, 2 Nov 2019 20:10:50 -0500
[Message part 1 (text/plain, inline)]
I've got an app that links gnutls (for crypto code) which links nettle
(libhogweed) with is a GMP-using crypto library which seems like it wanted
to call plain-old realloc, and ended up calling scm_realloc instead.  Note
that nettle does NOT use guile, so there's no plausible way that I know of
to end up in guile code.  This only seems to happen when nettle is used
from multiple threads (so is maybe a nettle bug??) but the stack trace is
so bizarre, I thought I'd report it here.

It would seem that someone, somewhere, is doing some low-level thunking or
trampolining of realloc().  First, the crazy stack trace:

It's currently highly reproducible and exact:
(gdb) r
Starting program:
/home/linas/src/novamente/src/atomspace-dht/build/tests/persist/dht/MultiUserUTest

[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Running cxxtest tests (2 tests)Start creating 6 user sessions
[2019-11-03 00:46:03:350] [DEBUG] BEGIN TEST: test_multiuser
Collecting from unknown thread

Thread 13 "MultiUserUTest" received signal SIGABRT, Aborted.
[Switching to Thread 0x7fffe0ff9700 (LWP 3844)]
__GI_raise (sig=sig <at> entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
50 ../sysdeps/unix/sysv/linux/raise.c: No such file or directory.
(gdb) bt
#0  __GI_raise (sig=sig <at> entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
#1  0x00007ffff6834535 in __GI_abort () at abort.c:79
#2  0x00007ffff5c80ded in GC_push_all_stacks () at pthread_stop_world.c:585
#3  0x00007ffff5c777df in GC_mark_some (
    cold_gc_frame=0x7fffe0ff59d0 "\274\327\354\365\377\177") at mark.c:322
#4  0x00007ffff5c6d15d in GC_stopped_mark (
    stop_func=stop_func <at> entry=0x7ffff5c6cbf0 <GC_never_stop_func>)
    at alloc.c:698
#5  0x00007ffff5c6dc69 in GC_try_to_collect_inner (
    stop_func=0x7ffff5c6cbf0 <GC_never_stop_func>) at alloc.c:486
#6  0x00007ffff5c6deea in GC_try_to_collect_general (
    stop_func=stop_func <at> entry=0x0, force_unmap=force_unmap <at> entry=0)
    at alloc.c:1065
#7  0x00007ffff5c6dfbd in GC_gcollect () at alloc.c:1089
#8  0x00007ffff6df3e5e in scm_gc_register_allocation (size=size <at> entry=136)
    at ../../libguile/gc.c:596
#9  0x00007ffff6df3554 in do_realloc (new_size=136, from=0x0)
    at ../../libguile/gc-malloc.c:70
#10 scm_realloc (mem=0x0, size=136) at ../../libguile/gc-malloc.c:117
#11 0x00007ffff630431f in _nettle_gmp_alloc ()
   from /usr/lib/x86_64-linux-gnu/libhogweed.so.4
#12 0x00007ffff62fc968 in nettle_mpz_random_size ()
   from /usr/lib/x86_64-linux-gnu/libhogweed.so.4
#13 0x00007ffff62fc9f4 in nettle_mpz_random ()
   from /usr/lib/x86_64-linux-gnu/libhogweed.so.4
#14 0x00007ffff62fcd63 in _nettle_generate_pocklington_prime ()
   from /usr/lib/x86_64-linux-gnu/libhogweed.so.4
#15 0x00007ffff62fd2ce in nettle_random_prime ()
   from /usr/lib/x86_64-linux-gnu/libhogweed.so.4
#16 0x00007ffff6300b53 in nettle_rsa_generate_keypair ()
   from /usr/lib/x86_64-linux-gnu/libhogweed.so.4
#17 0x00007ffff7e0729e in ?? () from
/usr/lib/x86_64-linux-gnu/libgnutls.so.30
#18 0x00007ffff7da8f07 in gnutls_x509_privkey_generate2 ()
   from /usr/lib/x86_64-linux-gnu/libgnutls.so.30
#19 0x00007ffff7f16990 in dht::crypto::PrivateKey::generate(unsigned int) ()
   from
/home/linas/src/novamente/src/atomspace-dht/build/opencog/persist/dht/libpersist-dht.so

Next, verify that nettle does not use scm:

$ nm /usr/lib/x86_64-linux-gnu/libhogweed.a |grep scm
(nothing printed)
$ nm /usr/lib/x86_64-linux-gnu/libhogweed.a |grep GC
(nothing printed)
$ nm /usr/lib/x86_64-linux-gnu/libhogweed.a |grep alloc
                 U _nettle_gmp_alloc
                 U _nettle_gmp_alloc
                 U _nettle_gmp_alloc
                 U _nettle_gmp_alloc
                 U _nettle_gmp_alloc
                 U _nettle_gmp_alloc
                 U _nettle_gmp_alloc
                 U _nettle_gmp_alloc
                 U _nettle_gmp_alloc
                 U _nettle_gmp_alloc
                 U _nettle_gmp_alloc
                 U _nettle_gmp_alloc
                 U _nettle_gmp_alloc
00000000000005f0 T _nettle_gmp_alloc
00000000000004e0 T _nettle_gmp_alloc_limbs
                 U _nettle_gmp_alloc_limbs
                 U _nettle_gmp_alloc_limbs
                 U _nettle_gmp_alloc_limbs
                 U _nettle_gmp_alloc_limbs
                 U _nettle_gmp_alloc_limbs
                 U _nettle_gmp_alloc_limbs
                 U _nettle_gmp_alloc_limbs
                 U _nettle_gmp_alloc_limbs
                 U _nettle_gmp_alloc_limbs

Debugging suggestions?
-- 
cassette tapes - analog TV - film cameras - you
[Message part 2 (text/html, inline)]

This bug report was last modified 4 years and 185 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.