On 2016/10/05 18:05, Alexandr Shadchin wrote: > On Wed, Oct 05, 2016 at 12:31:27PM +0100, Stuart Henderson wrote: > > There's a segfault when py-requests GETs an https resource (segv occurs > > after it calls verify_cb, it happens every time for every site I've tried). > > e.g. > > > > $ printf "import requests\nr = requests.get('https://www.openbsd.org/')\n" > > | python2.7 > > Segmentation fault (core dumped) > > > > Any ideas who is to blame or where to poke at next? > > > > I test on two machines, work fine, no segv. > > Snapshot: > > kern.version=OpenBSD 6.0-current (GENERIC.MP) #2529: Tue Oct 4 17:53:45 MDT > 2016 > dera...@amd64.openbsd.org:/usr/src/sys/arch/amd64/compile/GENERIC.MP > > Python 2.7.12 (default, Sep 26 2016, 15:57:20) > [GCC 4.2.1 20070719 ] on openbsd6
Weird. I've tried on another machine which is also OK. I've forcibly reinstalled all packages (and am using a current base snapshot) so I'm up-to-date everywhere on the machine where it's failing. > > > $ python2.7 > > Python 2.7.12 (default, Oct 3 2016, 09:11:44) > > [GCC 4.2.1 20070719 ] on openbsd6 > > Type "help", "copyright", "credits" or "license" for more information. > > >>> import requests > > >>> r = requests.get('https://dmtx.uk/') > > Segmentation fault (core dumped) > > > > $ gdb `which python2.7` python2.7.core > > GNU gdb 6.3 > > Copyright 2004 Free Software Foundation, Inc. > > GDB is free software, covered by the GNU General Public License, and you are > > welcome to change it and/or distribute copies of it under certain > > conditions. > > Type "show copying" to see the conditions. > > There is absolutely no warranty for GDB. Type "show warranty" for details. > > This GDB was configured as "amd64-unknown-openbsd6.0"...(no debugging > > symbols found) > > > > Core was generated by `python2.7'. > > Program terminated with signal 11, Segmentation fault. > > Reading symbols from /usr/lib/libpthread.so.23.0...done. > > Loaded symbols for /usr/lib/libpthread.so.23.0 > > Reading symbols from /usr/lib/libpthread.so.22.0...done. > > Loaded symbols for /usr/lib/libpthread.so.22.0 > > Loaded symbols for /usr/local/bin/python2.7 > > Reading symbols from /usr/local/lib/libpython2.7.so.0.0...done. > > Loaded symbols for /usr/local/lib/libpython2.7.so.0.0 > > Symbols already loaded for /usr/lib/libpthread.so.23.0 > > Reading symbols from /usr/lib/libutil.so.12.1...done. > > Loaded symbols for /usr/lib/libutil.so.12.1 > > Reading symbols from /usr/lib/libstdc++.so.57.0...done. > > Loaded symbols for /usr/lib/libstdc++.so.57.0 > > Reading symbols from /usr/lib/libm.so.10.0...done. > > Loaded symbols for /usr/lib/libm.so.10.0 > > Reading symbols from /usr/lib/libc.so.89.2...done. > > Loaded symbols for /usr/lib/libc.so.89.2 > > Reading symbols from /usr/libexec/ld.so...done. > > Loaded symbols for /usr/libexec/ld.so > > Reading symbols from /usr/local/lib/python2.7/lib-dynload/_locale.so...done. > > Loaded symbols for /usr/local/lib/python2.7/lib-dynload/_locale.so > > Reading symbols from /usr/local/lib/libintl.so.6.0...done. > > Loaded symbols for /usr/local/lib/libintl.so.6.0 > > Reading symbols from /usr/local/lib/libiconv.so.6.0...done. > > Loaded symbols for /usr/local/lib/libiconv.so.6.0 > > Reading symbols from > > /usr/local/lib/python2.7/lib-dynload/readline.so...done. > > Loaded symbols for /usr/local/lib/python2.7/lib-dynload/readline.so > > Reading symbols from /usr/lib/libreadline.so.4.0...done. > > Loaded symbols for /usr/lib/libreadline.so.4.0 > > Reading symbols from /usr/lib/libncursesw.so.14.0...done. > > Loaded symbols for /usr/lib/libncursesw.so.14.0 > > Reading symbols from /usr/local/lib/python2.7/lib-dynload/time.so...done. > > Loaded symbols for /usr/local/lib/python2.7/lib-dynload/time.so > > Reading symbols from > > /usr/local/lib/python2.7/lib-dynload/cStringIO.so...done. > > Loaded symbols for /usr/local/lib/python2.7/lib-dynload/cStringIO.so > > Reading symbols from > > /usr/local/lib/python2.7/lib-dynload/_collections.so...done. > > Loaded symbols for /usr/local/lib/python2.7/lib-dynload/_collections.so > > Reading symbols from > > /usr/local/lib/python2.7/lib-dynload/operator.so...done. > > Loaded symbols for /usr/local/lib/python2.7/lib-dynload/operator.so > > Reading symbols from > > /usr/local/lib/python2.7/lib-dynload/itertools.so...done. > > Loaded symbols for /usr/local/lib/python2.7/lib-dynload/itertools.so > > Reading symbols from /usr/local/lib/python2.7/lib-dynload/_heapq.so...done. > > Loaded symbols for /usr/local/lib/python2.7/lib-dynload/_heapq.so > > Reading symbols from /usr/local/lib/python2.7/lib-dynload/_socket.so...done. > > Loaded symbols for /usr/local/lib/python2.7/lib-dynload/_socket.so > > Reading symbols from > > /usr/local/lib/python2.7/lib-dynload/_functools.so...done. > > Loaded symbols for /usr/local/lib/python2.7/lib-dynload/_functools.so > > Reading symbols from /usr/local/lib/python2.7/lib-dynload/_ssl.so...done. > > Loaded symbols for /usr/local/lib/python2.7/lib-dynload/_ssl.so > > Reading symbols from /usr/lib/libssl.so.39.1...done. > > Loaded symbols for /usr/lib/libssl.so.39.1 > > Reading symbols from /usr/lib/libcrypto.so.38.1...done. > > Loaded symbols for /usr/lib/libcrypto.so.38.1 > > Reading symbols from /usr/local/lib/python2.7/lib-dynload/strop.so...done. > > Loaded symbols for /usr/local/lib/python2.7/lib-dynload/strop.so > > Reading symbols from /usr/local/lib/python2.7/lib-dynload/_struct.so...done. > > Loaded symbols for /usr/local/lib/python2.7/lib-dynload/_struct.so > > Reading symbols from > > /usr/local/lib/python2.7/lib-dynload/binascii.so...done. > > Loaded symbols for /usr/local/lib/python2.7/lib-dynload/binascii.so > > Reading symbols from /usr/lib/libz.so.5.0...done. > > Loaded symbols for /usr/lib/libz.so.5.0 > > Reading symbols from > > /usr/local/lib/python2.7/lib-dynload/datetime.so...done. > > Loaded symbols for /usr/local/lib/python2.7/lib-dynload/datetime.so > > Reading symbols from /usr/local/lib/python2.7/lib-dynload/array.so...done. > > Loaded symbols for /usr/local/lib/python2.7/lib-dynload/array.so > > Reading symbols from /usr/local/lib/python2.7/lib-dynload/_io.so...done. > > Loaded symbols for /usr/local/lib/python2.7/lib-dynload/_io.so > > Reading symbols from /usr/local/lib/python2.7/lib-dynload/math.so...done. > > Loaded symbols for /usr/local/lib/python2.7/lib-dynload/math.so > > Reading symbols from > > /usr/local/lib/python2.7/lib-dynload/_hashlib.so...done. > > Loaded symbols for /usr/local/lib/python2.7/lib-dynload/_hashlib.so > > Reading symbols from /usr/local/lib/python2.7/lib-dynload/_random.so...done. > > Loaded symbols for /usr/local/lib/python2.7/lib-dynload/_random.so > > Reading symbols from /usr/local/lib/python2.7/lib-dynload/fcntl.so...done. > > Loaded symbols for /usr/local/lib/python2.7/lib-dynload/fcntl.so > > Reading symbols from /usr/local/lib/python2.7/lib-dynload/select.so...done. > > Loaded symbols for /usr/local/lib/python2.7/lib-dynload/select.so > > Reading symbols from /usr/local/lib/python2.7/lib-dynload/_ctypes.so...done. > > Loaded symbols for /usr/local/lib/python2.7/lib-dynload/_ctypes.so > > Reading symbols from /usr/local/lib/libffi.so.1.2...done. > > Loaded symbols for /usr/local/lib/libffi.so.1.2 > > Reading symbols from /usr/local/lib/libuuid.so.14.0...done. > > Loaded symbols for /usr/local/lib/libuuid.so.14.0 > > Reading symbols from /usr/local/lib/python2.7/lib-dynload/zlib.so...done. > > Loaded symbols for /usr/local/lib/python2.7/lib-dynload/zlib.so > > Reading symbols from > > /usr/local/lib/python2.7/site-packages/cryptography/hazmat/bindings/_openssl.so...done. > > Loaded symbols for > > /usr/local/lib/python2.7/site-packages/cryptography/hazmat/bindings/_openssl.so > > Reading symbols from > > /usr/local/lib/python2.7/site-packages/_cffi_backend.so...done. > > Loaded symbols for /usr/local/lib/python2.7/site-packages/_cffi_backend.so > > Symbols already loaded for /usr/lib/libpthread.so.22.0 > > Reading symbols from /usr/local/lib/python2.7/lib-dynload/_json.so...done. > > Loaded symbols for /usr/local/lib/python2.7/lib-dynload/_json.so > > Reading symbols from /usr/local/lib/python2.7/lib-dynload/_bisect.so...done. > > Loaded symbols for /usr/local/lib/python2.7/lib-dynload/_bisect.so > > Reading symbols from /usr/local/lib/python2.7/lib-dynload/cPickle.so...done. > > Loaded symbols for /usr/local/lib/python2.7/lib-dynload/cPickle.so > > Reading symbols from > > /usr/local/lib/python2.7/lib-dynload/unicodedata.so...done. > > Loaded symbols for /usr/local/lib/python2.7/lib-dynload/unicodedata.so > > #0 0x000015a8f5d58fc0 in ?? () > > (gdb) bt > > #0 0x000015a8f5d58fc0 in ?? () > > #1 0x000015a944d9c19c in internal_verify (ctx=0x7f7fffff2d00) at > > /usr/src/lib/libcrypto/x509/x509_vfy.c:1611 > > #2 0x000015a944d9d859 in X509_verify_cert (ctx=0x7f7fffff2d00) at > > /usr/src/lib/libcrypto/x509/x509_vfy.c:374 > > #3 0x000015a8d527b690 in ssl_verify_cert_chain (s=0x15a95bd59000, > > sk=Variable "sk" is not available. > > ) at /usr/src/lib/libssl/ssl_cert.c:448 > > #4 0x000015a8d528edd0 in ssl3_get_server_certificate (s=0x15a95bd59000) at > > /usr/src/lib/libssl/s3_clnt.c:1015 > > #5 0x000015a8d52901c1 in ssl3_connect (s=0x15a95bd59000) at > > /usr/src/lib/libssl/s3_clnt.c:297 > > #6 0x000015a8d527f7de in ssl23_connect (s=0x15a95bd59000) at > > /usr/src/lib/libssl/s23_clnt.c:477 > > #7 0x000015a87fd79e5c in _cffi_f_SSL_do_handshake () from > > /usr/local/lib/python2.7/site-packages/cryptography/hazmat/bindings/_openssl.so > > #8 0x000015a8a0904868 in PyEval_EvalFrameEx () from > > /usr/local/lib/libpython2.7.so.0.0 > > #9 0x000015a8a090462a in PyEval_EvalFrameEx () from > > /usr/local/lib/libpython2.7.so.0.0 > > #10 0x000015a8a090667d in PyEval_EvalCodeEx () from > > /usr/local/lib/libpython2.7.so.0.0 > > #11 0x000015a8a0904567 in PyEval_EvalFrameEx () from > > /usr/local/lib/libpython2.7.so.0.0 > > #12 0x000015a8a090667d in PyEval_EvalCodeEx () from > > /usr/local/lib/libpython2.7.so.0.0 > > #13 0x000015a8a0904567 in PyEval_EvalFrameEx () from > > /usr/local/lib/libpython2.7.so.0.0 > > #14 0x000015a8a090667d in PyEval_EvalCodeEx () from > > /usr/local/lib/libpython2.7.so.0.0 > > #15 0x000015a8a0904567 in PyEval_EvalFrameEx () from > > /usr/local/lib/libpython2.7.so.0.0 > > #16 0x000015a8a090667d in PyEval_EvalCodeEx () from > > /usr/local/lib/libpython2.7.so.0.0 > > #17 0x000015a8a0904567 in PyEval_EvalFrameEx () from > > /usr/local/lib/libpython2.7.so.0.0 > > #18 0x000015a8a090667d in PyEval_EvalCodeEx () from > > /usr/local/lib/libpython2.7.so.0.0 > > #19 0x000015a8a0904567 in PyEval_EvalFrameEx () from > > /usr/local/lib/libpython2.7.so.0.0 > > #20 0x000015a8a090667d in PyEval_EvalCodeEx () from > > /usr/local/lib/libpython2.7.so.0.0 > > #21 0x000015a8a088df37 in function_call () from > > /usr/local/lib/libpython2.7.so.0.0 > > #22 0x000015a8a0864008 in PyObject_Call () from > > /usr/local/lib/libpython2.7.so.0.0 > > #23 0x000015a8a0900247 in PyEval_EvalFrameEx () from > > /usr/local/lib/libpython2.7.so.0.0 > > #24 0x000015a8a090667d in PyEval_EvalCodeEx () from > > /usr/local/lib/libpython2.7.so.0.0 > > #25 0x000015a8a088df37 in function_call () from > > /usr/local/lib/libpython2.7.so.0.0 > > #26 0x000015a8a0864008 in PyObject_Call () from > > /usr/local/lib/libpython2.7.so.0.0 > > #27 0x000015a8a0900247 in PyEval_EvalFrameEx () from > > /usr/local/lib/libpython2.7.so.0.0 > > #28 0x000015a8a090667d in PyEval_EvalCodeEx () from > > /usr/local/lib/libpython2.7.so.0.0 > > #29 0x000015a8a088df37 in function_call () from > > /usr/local/lib/libpython2.7.so.0.0 > > #30 0x000015a8a0864008 in PyObject_Call () from > > /usr/local/lib/libpython2.7.so.0.0 > > #31 0x000015a8a0900247 in PyEval_EvalFrameEx () from > > /usr/local/lib/libpython2.7.so.0.0 > > #32 0x000015a8a090667d in PyEval_EvalCodeEx () from > > /usr/local/lib/libpython2.7.so.0.0 > > #33 0x000015a8a088df37 in function_call () from > > /usr/local/lib/libpython2.7.so.0.0 > > #34 0x000015a8a0864008 in PyObject_Call () from > > /usr/local/lib/libpython2.7.so.0.0 > > #35 0x000015a8a0900247 in PyEval_EvalFrameEx () from > > /usr/local/lib/libpython2.7.so.0.0 > > #36 0x000015a8a090667d in PyEval_EvalCodeEx () from > > /usr/local/lib/libpython2.7.so.0.0 > > #37 0x000015a8a0904567 in PyEval_EvalFrameEx () from > > /usr/local/lib/libpython2.7.so.0.0 > > #38 0x000015a8a090667d in PyEval_EvalCodeEx () from > > /usr/local/lib/libpython2.7.so.0.0 > > #39 0x000015a8a0906772 in PyEval_EvalCode () from > > /usr/local/lib/libpython2.7.so.0.0 > > #40 0x000015a8a0923902 in run_mod () from /usr/local/lib/libpython2.7.so.0.0 > > #41 0x000015a8a09254eb in PyRun_InteractiveOneFlags () from > > /usr/local/lib/libpython2.7.so.0.0 > > #42 0x000015a8a09256fe in PyRun_InteractiveLoopFlags () from > > /usr/local/lib/libpython2.7.so.0.0 > > #43 0x000015a8a092582c in PyRun_AnyFileExFlags () from > > /usr/local/lib/libpython2.7.so.0.0 > > #44 0x000015a8a093643c in Py_Main () from /usr/local/lib/libpython2.7.so.0.0 > > #45 0x000015a675e00462 in _start () from /usr/local/bin/python2.7 > > #46 0x0000000000000000 in ?? () > > (gdb) frame 1 > > #1 0x000015a944d9c19c in internal_verify (ctx=0x7f7fffff2d00) at > > /usr/src/lib/libcrypto/x509/x509_vfy.c:1611 > > 1611 ok = (*cb)(1, ctx); > > (gdb) list > > 1606 goto end; > > 1607 > > 1608 /* The last error (if any) is still in the > > error value */ > > 1609 ctx->current_issuer = xi; > > 1610 ctx->current_cert = xs; > > 1611 ok = (*cb)(1, ctx); > > 1612 if (!ok) > > 1613 goto end; > > 1614 > > 1615 n--; > > (gdb) p *ctx > > $1 = {ctx = 0x15a8e3598700, current_method = 0, cert = 0x15a8ba55ff00, > > untrusted = 0x15a8be37cee0, crls = 0x0, param = 0x15a913dac300, > > other_ctx = 0x0, verify = 0x15a944d9c090 <internal_verify>, > > verify_cb = 0x15a8f5d58fc0, > > get_issuer = 0x15a944dd59b0 <X509_STORE_CTX_get1_issuer>, > > check_issued = 0x15a944d9b990 <check_issued>, > > check_revocation = 0x15a944d9cbe0 <check_revocation>, > > get_crl = 0, check_crl = 0x15a944d9d970 <check_crl>, > > cert_crl = 0x15a944d9b7c0 <cert_crl>, > > check_policy = 0x15a944d9b660 <check_policy>, > > lookup_certs = 0x15a944dd5e30 <X509_STORE_get1_certs>, > > lookup_crls = 0x15a944dd5c30 <X509_STORE_get1_crls>, > > cleanup = 0, valid = 0, last_untrusted = 2, chain = 0x15a90e0f90a0, > > tree = 0x0, explicit_policy = 0, error_depth = 2, error = 0, > > current_cert = 0x15a94b2ac400, current_issuer = 0x15a94b2ac400, > > current_crl = 0x0, current_crl_score = 0, current_reasons = 0, > > parent = 0x0, ex_data = {sk = 0x15a90c5969a0}} > > (gdb) list > > 1606 goto end; > > 1607 > > 1608 /* The last error (if any) is still in the > > error value */ > > 1609 ctx->current_issuer = xi; > > 1610 ctx->current_cert = xs; > > 1611 ok = (*cb)(1, ctx); > > 1612 if (!ok) > > 1613 goto end; > > 1614 > > 1615 n--; > > (gdb) p *ctx->cert > > $2 = {cert_info = 0x15a8930ff000, sig_alg = 0x15a887c641a0, > > signature = 0x15a9078c4880, valid = 0, references = 2, > > name = 0x15a8b98ffa00 "/CN=dmtx.uk", ex_data = {sk = 0x0}, > > ex_pathlen = -1, ex_pcpathlen = 0, ex_flags = 263, > > ex_kusage = 160, ex_xkusage = 3, ex_nscert = 0, > > skid = 0x15a90c596fe0, akid = 0x15a8be37c080, > > policy_cache = 0x0, crldp = 0x0, > > altname = 0x15a8e0140a20, nc = 0x0, > > sha1_hash = "])D\231Dëï·ö\017]óî{Ël!À)X", aux = 0x0} > > (gdb) p *ctx->verify > > $3 = {int (X509_STORE_CTX *)} 0x15a944d9c090 <internal_verify> > > (gdb) p *ctx->verify_cb > > $4 = {int (int, X509_STORE_CTX *)} 0x15a8f5d58fc0 > > > > -- > Alexandr Shadchin >