Skip to content

cargo segfaults on NFS with git dependencies #3042

Closed
@asomers

Description

@asomers

On FreeBSD, running "cargo build" on any repo with a git dependency specified in Cargo.toml will segfault. It doesn't matter if the dependency is on github or uses a file:/// url.

cargo version
cargo 0.11.0 (built 2016-07-27)
cargo test
    Updating git repository `https://github.com/asomers/libc`
error: Unable to update https://github.com/asomers/libc?rev=a4721e8

To learn more, run the command again with --verbose.
fish: 'cargo test' terminated by signal SIGSEGV (Address boundary error)

Here is the backtrace from the core file:

#0  0x00000000014c5be1 in ?? ()
#1  0x00000000014da841 in ?? ()
#2  0x00000000014da636 in ?? ()
#3  0x00000008023bb685 in CRYPTO_free (str=0x80521ffa8) at /usr/src/secure/lib/libcrypto/../../../crypto/openssl/crypto/mem.c:442
#4  0x00000008023b9cb2 in ASN1_STRING_free (a=0x8052add00) at /usr/src/secure/lib/libcrypto/../../../crypto/openssl/crypto/asn1/asn1_lib.c:425
#5  0x00000008023b2bb2 in ASN1_primitive_free (pval=0x8052adcf0, it=0x8052084e8) at /usr/src/secure/lib/libcrypto/../../../crypto/openssl/crypto/asn1/tasn_fre.c:244
#6  0x00000008023b28eb in asn1_item_combine_free (pval=<optimized out>, it=<optimized out>, combine=<optimized out>) at /usr/src/secure/lib/libcrypto/../../../crypto/openssl/crypto/asn1/tasn_fre.c:166
#7  0x00000008023b2aac in ASN1_template_free (pval=<optimized out>, tt=<optimized out>) at /usr/src/secure/lib/libcrypto/../../../crypto/openssl/crypto/asn1/tasn_fre.c:186
#8  0x00000008023b28eb in asn1_item_combine_free (pval=<optimized out>, it=<optimized out>, combine=<optimized out>) at /usr/src/secure/lib/libcrypto/../../../crypto/openssl/crypto/asn1/tasn_fre.c:166
#9  0x00000008023b28eb in asn1_item_combine_free (pval=<optimized out>, it=<optimized out>, combine=<optimized out>) at /usr/src/secure/lib/libcrypto/../../../crypto/openssl/crypto/asn1/tasn_fre.c:166
#10 0x00000008023b27d6 in ASN1_item_free (val=<error reading variable: Cannot access memory at address 0x1fe0>, it=0x8052084e8) at /usr/src/secure/lib/libcrypto/../../../crypto/openssl/crypto/asn1/tasn_fre.c:72
#11 0x00000008022ff793 in cleanup (a=0x8053724a0) at /usr/src/secure/lib/libcrypto/../../../crypto/openssl/crypto/x509/x509_lu.c:222
#12 0x0000000802303d30 in sk_pop_free (st=<optimized out>, func=<optimized out>) at /usr/src/secure/lib/libcrypto/../../../crypto/openssl/crypto/stack/stack.c:327
#13 0x00000008022ff740 in X509_STORE_free (vfy=<optimized out>) at /usr/src/secure/lib/libcrypto/../../../crypto/openssl/crypto/x509/x509_lu.c:261
#14 0x0000000801eb4156 in SSL_CTX_free (a=0x805238380) at /usr/src/secure/lib/libssl/../../../crypto/openssl/ssl/ssl_lib.c:2142
#15 0x000000000144f77a in ?? ()
#16 0x000000000143deb1 in ?? ()
#17 0x0000000802deea46 in __cxa_finalize (dso=<optimized out>) at /usr/src/lib/libc/stdlib/atexit.c:237
#18 0x0000000802d7e04c in exit (status=101) at /usr/src/lib/libc/stdlib/exit.c:66
#19 0x00000000014a0ca0 in ?? ()
#20 0x0000000001114801 in ?? ()
#21 0x000000000109a757 in ?? ()
#22 0x00000000010a31e0 in ?? ()
#23 0x000000000109c15c in ?? ()
#24 0x0000000001098f92 in ?? ()
#25 0x00000000014ac079 in ?? ()
#26 0x00000000014b991c in ?? ()
#27 0x00000000014b98bf in ?? ()
#28 0x00000000014abafa in ?? ()
#29 0x0000000001098971 in ?? ()
#30 0x00000008017f0000 in ?? ()
#31 0x0000000000000000 in ?? ()

Using Cargo from git, the result is an assertion error instead of a segfault.

~/src/rust/cargo/target/debug/cargo version
cargo 0.13.0
~/src/rust/cargo/target/debug/cargo test
    Updating git repository `https://github.com/asomers/libc`
Assertion failed: (e->refcount.val == 0), function free_cache_object, file /usr/home/somers/.cargo/registry/src/github.heygears.com-1ecc6299db9ec823/libgit2-sys-0.4.5/libgit2/src/pack.c, line 73.
fish: '~/src/rust/cargo/target/debug/c…' terminated by signal SIGABRT (Abort)

In this case, the core file contains no intelligible stack trace.

My Cargo.toml file contains the following lines. However, every other variation I tried produces the same result, as long as it involves git.

[dependencies]
libc = { git = "https://github.com/asomers/libc", rev="a4721e8"}

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-filesystemArea: issues with filesystemsA-gitArea: anything dealing with gitC-bugCategory: bugS-blocked-externalStatus: ❌ blocked on something out of the direct control of the Cargo project, e.g., upstream fix

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions