GNU bug report logs -
#38041
crypto with gnutls aka nettle (libhogweed) and scm_realloc
Previous Next
To reply to this bug, email your comments to 38041 AT debbugs.gnu.org.
Toggle the display of automated, internal messages from the tracker.
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):
[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.