Dear Maintainer,
I tried to reproduce this fault, but did not get a segfault.

However, I think the backtrace points to these lines:

    (gdb) bt
    #0  0x00007ffff769dbce in int_ctx_new () at ../crypto/evp/pmeth_lib.c:160
    #1  0x00007ffff769dcfa in EVP_PKEY_CTX_new () at 
../crypto/evp/pmeth_lib.c:245
    #2  0x00007ffff7698d44 in do_sigver_init () at ../crypto/evp/m_sigver.c:29
    #3  0x00007ffff7698eab in EVP_DigestVerifyInit () at 
../crypto/evp/m_sigver.c:97
    #4  0x00007ffff75bc7d2 in ASN1_item_verify () at 
../crypto/asn1/a_verify.c:148
    #5  0x00007ffff7722490 in X509_verify () at ../crypto/x509/x_all.c:26
    ...

    
https://sources.debian.org/src/openssl/1.1.1d-0+deb10u3/crypto/evp/pmeth_lib.c/#L160

    159     if (pmeth->init) {
    160         if (pmeth->init(ret) <= 0) {
    161             ret->pmeth = NULL;

As there is a check for pmeth->init being non-null, I guess
it contains for some reason an invalid pointer.


@Bruce Momjian,
maybe you could install the following debug symbols packages
`curl-dbgsym libcurl4-dbgsym libssl1.1-dbgsym` from the dbgsym
repository described here:
    https://wiki.debian.org/HowToGetABacktrace#Installing_the_debugging_symbols

Then run a new gdb session and when the segfault appears
please run these commands in gdb:
    print pmeth->init
    bt full 5


Kind regards,
Bernhard

# Buster/stable amd64 qemu VM


apt update
apt dist-upgrade


apt install systemd-coredump curl gdb


curl https://google.com


dpkg -l curl libc6 libcurl4 zlib1g libssl1.1
ii  curl            7.64.0-4+deb10u1 amd64        command line tool for 
transferring data with URL syntax
ii  libc6:amd64     2.28-10          amd64        GNU C Library: Shared 
libraries
ii  libcurl4:amd64  7.64.0-4+deb10u1 amd64        easy-to-use client-side URL 
transfer library (OpenSSL flavour)
ii  libssl1.1:amd64 1.1.1d-0+deb10u3 amd64        Secure Sockets Layer toolkit 
- shared libraries
ii  zlib1g:amd64    1:1.2.11.dfsg-1  amd64        compression library - runtime


benutzer@debian:~$ curl https://google.com
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="https://www.google.com/";>here</A>.
</BODY></HTML>



gdb -q --args curl https://google.com
b ASN1_item_verify
y
run

disassemble ASN1_item_verify
b EVP_DigestVerifyInit
cont

...
generate-core-file /tmp/core


(gdb) bt
#0  0x00007ffff769dbce in ?? () from /lib/x86_64-linux-gnu/libcrypto.so.1.1
#1  0x00007ffff7698d44 in ?? () from /lib/x86_64-linux-gnu/libcrypto.so.1.1
#2  0x00007ffff75bc7d2 in ASN1_item_verify () from 
/lib/x86_64-linux-gnu/libcrypto.so.1.1
#3  0x00007ffff771cfb4 in ?? () from /lib/x86_64-linux-gnu/libcrypto.so.1.1
#4  0x00007ffff771edd6 in ?? () from /lib/x86_64-linux-gnu/libcrypto.so.1.1
#5  0x00007ffff771f416 in X509_verify_cert () from 
/lib/x86_64-linux-gnu/libcrypto.so.1.1
#6  0x00007ffff782fb88 in ?? () from /lib/x86_64-linux-gnu/libssl.so.1.1
#7  0x00007ffff78510f3 in ?? () from /lib/x86_64-linux-gnu/libssl.so.1.1
#8  0x00007ffff78536c5 in ?? () from /lib/x86_64-linux-gnu/libssl.so.1.1
#9  0x00007ffff784d143 in ?? () from /lib/x86_64-linux-gnu/libssl.so.1.1
#10 0x00007ffff7838f34 in SSL_do_handshake () from 
/lib/x86_64-linux-gnu/libssl.so.1.1
#11 0x00007ffff7fa3240 in ?? () from /lib/x86_64-linux-gnu/libcurl.so.4
#12 0x00007ffff7fa53f0 in ?? () from /lib/x86_64-linux-gnu/libcurl.so.4
#13 0x00007ffff7fa61da in ?? () from /lib/x86_64-linux-gnu/libcurl.so.4
#14 0x00007ffff7f4d462 in ?? () from /lib/x86_64-linux-gnu/libcurl.so.4
#15 0x00007ffff7f6f6fe in ?? () from /lib/x86_64-linux-gnu/libcurl.so.4
#16 0x00007ffff7f70aa9 in curl_multi_perform () from 
/lib/x86_64-linux-gnu/libcurl.so.4
#17 0x00007ffff7f67642 in curl_easy_perform () from 
/lib/x86_64-linux-gnu/libcurl.so.4
#18 0x0000555555569f30 in ?? ()
#19 0x000055555556b42a in ?? ()
#20 0x000055555555d8c4 in ?? ()
#21 0x00007ffff7b5c09b in __libc_start_main (main=0x55555555d770, argc=2, 
argv=0x7fffffffe608, init=<optimized out>, fini=<optimized out>, 
rtld_fini=<optimized out>, stack_end=0x7fffffffe5f8)
    at ../csu/libc-start.c:308
#22 0x000055555555d9da in ?? ()



apt install curl-dbgsym libcurl4-dbgsym libssl1.1-dbgsym


gdb -q /usr/bin/curl --core /tmp/core

set width 0
set pagination off

(gdb) bt
#0  0x00007ffff769dbce in int_ctx_new (pkey=pkey@entry=0x555555601a10, 
e=e@entry=0x0, id=<optimized out>, id@entry=-1) at ../crypto/evp/pmeth_lib.c:160
#1  0x00007ffff769dcfa in EVP_PKEY_CTX_new (pkey=pkey@entry=0x555555601a10, 
e=e@entry=0x0) at ../crypto/evp/pmeth_lib.c:245
#2  0x00007ffff7698d44 in do_sigver_init (ctx=ctx@entry=0x555555601930, 
pctx=pctx@entry=0x0, type=type@entry=0x7ffff77d5fc0 <sha256_md>, e=e@entry=0x0, 
pkey=pkey@entry=0x555555601a10, ver=ver@entry=1) at ../crypto/evp/m_sigver.c:29
#3  0x00007ffff7698eab in EVP_DigestVerifyInit (ctx=ctx@entry=0x555555601930, 
pctx=pctx@entry=0x0, type=type@entry=0x7ffff77d5fc0 <sha256_md>, e=e@entry=0x0, 
pkey=pkey@entry=0x555555601a10) at ../crypto/evp/m_sigver.c:97
#4  0x00007ffff75bc7d2 in ASN1_item_verify (it=0x7ffff77e7e80 <X509_CINF_it>, 
a=a@entry=0x5555555fda18, signature=signature@entry=0x5555555fda28, 
asn=asn@entry=0x5555555fd990, pkey=0x555555601a10) at 
../crypto/asn1/a_verify.c:148
#5  0x00007ffff7722490 in X509_verify (a=a@entry=0x5555555fd990, r=<optimized 
out>) at ../crypto/x509/x_all.c:26
#6  0x00007ffff771cfb4 in internal_verify (ctx=0x555555601550) at 
../crypto/x509/x509_vfy.c:1750
#7  0x00007ffff771edd6 in verify_chain (ctx=0x555555601550) at 
../crypto/x509/x509_vfy.c:232
#8  verify_chain (ctx=0x555555601550) at ../crypto/x509/x509_vfy.c:207
#9  0x00007ffff771f416 in X509_verify_cert (ctx=ctx@entry=0x555555601550) at 
../crypto/x509/x509_vfy.c:295
#10 0x00007ffff782fb88 in ssl_verify_cert_chain (s=s@entry=0x5555555ef0a0, 
sk=sk@entry=0x5555556008a0) at ../ssl/ssl_cert.c:427
#11 0x00007ffff78510f3 in tls_process_server_certificate (s=0x5555555ef0a0, 
pkt=0x7fffffffdb10) at ../ssl/statem/statem_clnt.c:1897
#12 0x00007ffff78536c5 in ossl_statem_client_process_message (s=0x5555555ef0a0, 
pkt=<optimized out>) at ../ssl/statem/statem_clnt.c:1039
#13 0x00007ffff784d143 in read_state_machine (s=0x5555555ef0a0) at 
../ssl/statem/statem.c:636
#14 state_machine (s=0x5555555ef0a0, server=0) at ../ssl/statem/statem.c:434
#15 0x00007ffff7838f34 in SSL_do_handshake (s=0x5555555ef0a0) at 
../ssl/ssl_lib.c:3607
#16 0x00007ffff7fa3240 in ossl_connect_step2 (conn=conn@entry=0x5555555c0d60, 
sockindex=sockindex@entry=0) at vtls/openssl.c:2790
#17 0x00007ffff7fa53f0 in ossl_connect_common (conn=0x5555555c0d60, 
sockindex=0, nonblocking=true, done=0x7fffffffde28) at vtls/openssl.c:3591
#18 0x00007ffff7fa61da in Curl_ssl_connect_nonblocking 
(conn=conn@entry=0x5555555c0d60, sockindex=sockindex@entry=0, 
done=0x7fffffffde28) at vtls/vtls.c:275
#19 0x00007ffff7f4d462 in https_connecting (conn=0x5555555c0d60, 
done=<optimized out>) at http.c:1521
#20 0x00007ffff7f6f6fe in multi_runsingle (multi=multi@entry=0x5555555be950, 
now=..., data=data@entry=0x5555555c2bb0) at multi.c:1650
#21 0x00007ffff7f70aa9 in curl_multi_perform (multi=multi@entry=0x5555555be950, 
running_handles=running_handles@entry=0x7fffffffdfa4) at multi.c:2217
#22 0x00007ffff7f67642 in easy_transfer (multi=0x5555555be950) at easy.c:686
#23 easy_perform (events=false, data=0x5555555c2bb0) at easy.c:780
#24 curl_easy_perform (data=data@entry=0x5555555c2bb0) at easy.c:799
#25 0x0000555555569f30 in operate_do (global=global@entry=0x7fffffffe480, 
config=0x5555555a8c00) at tool_operate.c:1578
#26 0x000055555556b42a in operate (config=0x7fffffffe480, argc=<optimized out>, 
argv=<optimized out>) at tool_operate.c:2081
#27 0x000055555555d8c4 in main (argc=2, argv=0x7fffffffe608) at tool_main.c:326

(gdb) disassemble
Dump of assembler code for function int_ctx_new:
   0x00007ffff769db20 <+0>:     push   %r13
   0x00007ffff769db22 <+2>:     push   %r12
   0x00007ffff769db24 <+4>:     mov    %rdi,%r12
   0x00007ffff769db27 <+7>:     push   %rbp
   0x00007ffff769db28 <+8>:     mov    %rsi,%rbp
   0x00007ffff769db2b <+11>:    push   %rbx
   0x00007ffff769db2c <+12>:    mov    %edx,%ebx
   0x00007ffff769db2e <+14>:    sub    $0x8,%rsp
   0x00007ffff769db32 <+18>:    cmp    $0xffffffff,%edx
   0x00007ffff769db35 <+21>:    je     0x7ffff769dc20 <int_ctx_new+256>
   0x00007ffff769db3b <+27>:    test   %rbp,%rbp
   0x00007ffff769db3e <+30>:    jne    0x7ffff769dbf5 <int_ctx_new+213>
   0x00007ffff769db44 <+36>:    test   %r12,%r12
   0x00007ffff769db47 <+39>:    je     0x7ffff769dbf5 <int_ctx_new+213>
   0x00007ffff769db4d <+45>:    mov    0x20(%r12),%rbp
   0x00007ffff769db52 <+50>:    test   %rbp,%rbp
   0x00007ffff769db55 <+53>:    je     0x7ffff769dbf0 <int_ctx_new+208>
   0x00007ffff769db5b <+59>:    mov    %rbp,%rdi
   0x00007ffff769db5e <+62>:    callq  0x7ffff75a3dd0 <ENGINE_init@plt>
   0x00007ffff769db63 <+67>:    test   %eax,%eax
   0x00007ffff769db65 <+69>:    je     0x7ffff769dc60 <int_ctx_new+320>
   0x00007ffff769db6b <+75>:    mov    %ebx,%esi
   0x00007ffff769db6d <+77>:    mov    %rbp,%rdi
   0x00007ffff769db70 <+80>:    callq  0x7ffff759d630 <ENGINE_get_pkey_meth@plt>
   0x00007ffff769db75 <+85>:    mov    %rax,%r13
   0x00007ffff769db78 <+88>:    test   %r13,%r13
   0x00007ffff769db7b <+91>:    je     0x7ffff769dc30 <int_ctx_new+272>
   0x00007ffff769db81 <+97>:    mov    $0x90,%edx
   0x00007ffff769db86 <+102>:   lea    0xc7cee(%rip),%rsi        # 
0x7ffff776587b
   0x00007ffff769db8d <+109>:   mov    $0x50,%edi
   0x00007ffff769db92 <+114>:   callq  0x7ffff75a2d30 <CRYPTO_zalloc@plt>
   0x00007ffff769db97 <+119>:   mov    %rax,%rbx
   0x00007ffff769db9a <+122>:   test   %rax,%rax
   0x00007ffff769db9d <+125>:   je     0x7ffff769dcb0 <int_ctx_new+400>
   0x00007ffff769dba3 <+131>:   mov    %rbp,0x8(%rax)
   0x00007ffff769dba7 <+135>:   mov    %r13,(%rax)
   0x00007ffff769dbaa <+138>:   movl   $0x0,0x20(%rax)
   0x00007ffff769dbb1 <+145>:   mov    %r12,0x10(%rax)
   0x00007ffff769dbb5 <+149>:   test   %r12,%r12
   0x00007ffff769dbb8 <+152>:   je     0x7ffff769dbc2 <int_ctx_new+162>
   0x00007ffff769dbba <+154>:   mov    %r12,%rdi
   0x00007ffff769dbbd <+157>:   callq  0x7ffff75a29c0 <EVP_PKEY_up_ref@plt>
   0x00007ffff769dbc2 <+162>:   mov    0x8(%r13),%rax
   0x00007ffff769dbc6 <+166>:   test   %rax,%rax
   0x00007ffff769dbc9 <+169>:   je     0x7ffff769dbd8 <int_ctx_new+184>
   0x00007ffff769dbcb <+171>:   mov    %rbx,%rdi
=> 0x00007ffff769dbce <+174>:   callq  *%rax
   0x00007ffff769dbd0 <+176>:   test   %eax,%eax
   0x00007ffff769dbd2 <+178>:   jle    0x7ffff769dc90 <int_ctx_new+368>
...
   0x00007ffff769dcde <+446>:   xchg   %ax,%ax
   0x00007ffff769dce0 <+448>:   xor    %ebx,%ebx
   0x00007ffff769dce2 <+450>:   jmpq   0x7ffff769dbd8 <int_ctx_new+184>
End of assembler dump.



https://sources.debian.org/src/openssl/1.1.1d-0+deb10u3/crypto/evp/pmeth_lib.c/#L160



apt install valgrind

Reply via email to