Search code examples
cgdblibcurldebug-backtrace

Stack frame NULL in backtrace log


My application is receiving the segmentation fault. The back trace log -

Program received signal SIGSEV, Segmentation fault.
0x00000000004a5c03 in engine_unlocked_finish ()

(gdb) bt

#0  0x00000000004a5c03 in engine_unlocked_finish ()
#1  0x00000000004a5d71 in ENGINE_finish ()
#2  0x000000000046a537 in EVP_PKEY_free_it ()
#3  0x000000000046a91b in EVP_PKEY_free ()
#4  0x00000000004b231a in pubkey_cb ()
#5  0x0000000000470c97 in asn1_item_combine_free ()
#6  0x0000000000750f70 in X509_CINF_seq_tt ()
#7  0x00000000010f7d90 in ?? ()
#8  0x00000000010f7cf0 in ?? ()
#9  0x0000000000000000 in ?? ()

The stackframe at #9 is interesting. It's address is 0x0000000000000000. Does this mean stack got corrupted even before getting to engine_unlocked_finish () ?


Solution

  • The stackframe at #9 is interesting.

    Not really. What's most likely happening is that X509_CINF_seq_tt is hand-coded assembly, and lacks correct unwind descriptors, so everything after it in the stack trace is just bogus.

    In fact, looking at this source, X509_CINF_seq_tt is not even a function, so it's probably asn1_item_combine_free that starts the "bad unwind".