On 2016/08/03 12:10, Stuart Henderson wrote: > On 2016/07/30 17:04, Giovanni Bechis wrote: > > On Sat, Jul 30, 2016 at 11:57:14AM +0100, Stuart Henderson wrote: > > > Forwarding from an offlist message because incoming mail is broken.. > > > > > no problem for me, just renewed my certificate with > > authenticator=standalone @i386 (OpenBSD 6.0 (GENERIC) #1915: Tue Jul 26 > > 09:46:01 MDT 2016) > > Have you added wxallowed in fstab(5) ? > > So wxallowed is required for this; it turns out that this is > due to devel/py-cffi. py-cffi does an mmap which is currently > RWX unless it detects PaX on Linux in which case it changes > it to RW. But if I change things to permit that, we run into > another problem: the library using py-cffi in this case is > py-cryptography, which calls out to libcrypto, and it segfaults > after doing so: > > (gdb) bt > #0 0x000003d6f2169fc0 in ?? () > #1 0x000003d6bef3ba4c in internal_verify (ctx=0x7f7ffffe4eb0) > at > /usr/src/lib/libcrypto/crypto/../../libssl/src/crypto/x509/x509_vfy.c:1611 > #2 0x000003d6bef3d109 in X509_verify_cert (ctx=0x7f7ffffe4eb0) > at > /usr/src/lib/libcrypto/crypto/../../libssl/src/crypto/x509/x509_vfy.c:374 > #3 0x000003d78b79c8f0 in ssl_verify_cert_chain (s=0x3d6c5708000, sk=Variable > "sk" is not available. > ) > at /usr/src/lib/libssl/ssl/../../libssl/src/ssl/ssl_cert.c:448 > #4 0x000003d78b78c030 in ssl3_get_server_certificate (s=0x3d6c5708000) > at /usr/src/lib/libssl/ssl/../../libssl/src/ssl/s3_clnt.c:1015 > #5 0x000003d78b78d421 in ssl3_connect (s=0x3d6c5708000) > at /usr/src/lib/libssl/ssl/../../libssl/src/ssl/s3_clnt.c:297 > #6 0x000003d78b794c4e in ssl23_connect (s=0x3d6c5708000) > at /usr/src/lib/libssl/ssl/../../libssl/src/ssl/s23_clnt.c:477 > #7 0x000003d78a76f08c in _cffi_f_SSL_do_handshake () > from > /usr/local/lib/python2.7/site-packages/cryptography/hazmat/bindings/_openssl.so > #8 0x000003d70659d528 in PyEval_EvalFrameEx () > from /usr/local/lib/libpython2.7.so.0.0 > #9 0x000003d70659d2ea in PyEval_EvalFrameEx () > from /usr/local/lib/libpython2.7.so.0.0 > #10 0x000003d70659f33d in PyEval_EvalCodeEx () > > 1604 ok = x509_check_cert_time(ctx, xs, 0); > 1605 if (!ok) > 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; > > At the moment I don't have any ideas other than "mark /usr/local > as wxallowed if you want to run things using py-cffi". Can anyone > think of something better? >
Here are some more prints from another run of this (this segfault is occurring with py-cffi patched to just do RW mappings; it occurs whether or not the partition is marked wxallowed). I can't do any more digging until next week. (gdb) bt #0 0x00001207405f1fc0 in ?? () #1 0x00001206b3377a4c in internal_verify (ctx=0x7f7ffffeaae0) at /usr/src/lib/libcrypto/crypto/../../libssl/src/crypto/x509/x509_vfy.c:1611 #2 0x00001206b3379109 in X509_verify_cert (ctx=0x7f7ffffeaae0) at /usr/src/lib/libcrypto/crypto/../../libssl/src/crypto/x509/x509_vfy.c:374 #3 0x00001206d2eff8f0 in ssl_verify_cert_chain (s=0x120700f1c000, sk=Variable "sk" is not available. ) at /usr/src/lib/libssl/ssl/../../libssl/src/ssl/ssl_cert.c:448 #4 0x00001206d2eef030 in ssl3_get_server_certificate (s=0x120700f1c000) at /usr/src/lib/libssl/ssl/../../libssl/src/ssl/s3_clnt.c:1015 #5 0x00001206d2ef0421 in ssl3_connect (s=0x120700f1c000) at /usr/src/lib/libssl/ssl/../../libssl/src/ssl/s3_clnt.c:297 #6 0x00001206d2ef7c4e in ssl23_connect (s=0x120700f1c000) at /usr/src/lib/libssl/ssl/../../libssl/src/ssl/s23_clnt.c:477 #7 0x00001206dca5a44f in _cffi_f_SSL_do_handshake (self=0x1206c2cf7dc0, arg0=0x1206b5421650) at /usr/obj/ports/py-cryptography-1.4/cryptography-1.4/temp.openbsd-6.0-amd64-2.7/_openssl.c:51236 #8 0x0000120731c1a528 in PyEval_EvalFrameEx () from /usr/local/lib/libpython2.7.so.0.0 #9 0x0000120731c1a2ea in PyEval_EvalFrameEx () from /usr/local/lib/libpython2.7.so.0.0 [..] #38 0x0000120731c1c33d in PyEval_EvalCodeEx () from /usr/local/lib/libpython2.7.so.0.0 #39 0x0000120731ba3bf7 in function_call () from /usr/local/lib/libpython2.7.so.0.0 #40 0x0000120731b79cc8 in PyObject_Call () from /usr/local/lib/libpython2.7.so.0.0 #41 0x0000120731b88f92 in instancemethod_call () from /usr/local/lib/libpython2.7.so.0.0 [..] (gdb) frame 1 #1 0x00001206b3377a4c in internal_verify (ctx=0x7f7ffffeaae0) at /usr/src/lib/libcrypto/crypto/../../libssl/src/crypto/x509/x509_vfy.c:1611 1611 ok = (*cb)(1, ctx); (gdb) p *ctx $1 = {ctx = 0x1206c17c4d00, current_method = 0, cert = 0x12067c8ab600, untrusted = 0x1206c17ca8c0, crls = 0x0, param = 0x120753e79540, other_ctx = 0x0, verify = 0x1206b3377940 <internal_verify>, verify_cb = 0x1207405f1fc0, get_issuer = 0x1206b333f890 <X509_STORE_CTX_get1_issuer>, check_issued = 0x1206b3377240 <check_issued>, check_revocation = 0x1206b3378490 <check_revocation>, get_crl = 0, check_crl = 0x1206b3379220 <check_crl>, cert_crl = 0x1206b3377070 <cert_crl>, check_policy = 0x1206b3376f10 <check_policy>, lookup_certs = 0x1206b333fd10 <X509_STORE_get1_certs>, lookup_crls = 0x1206b333fb10 <X509_STORE_get1_crls>, cleanup = 0, valid = 0, last_untrusted = 3, chain = 0x1206a6a5c860, tree = 0x0, explicit_policy = 0, error_depth = 3, error = 0, current_cert = 0x1206d841ae00, current_issuer = 0x1206d841ae00, current_crl = 0x0, current_crl_score = 0, current_reasons = 0, parent = 0x0, ex_data = {sk = 0x1206a6a5ca00}} (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 = 0x120738043f80, sig_alg = 0x1206fd9518f0, signature = 0x1206881396c0, valid = 0, references = 2, name = 0x1206de46cc00 "/CN=*.api.letsencrypt.org/O=INTERNET SECURITY RESEARCH GROUP/L=Mountain View/ST=California/C=US", ex_data = {sk = 0x0}, ex_pathlen = -1, ex_pcpathlen = 0, ex_flags = 262, ex_kusage = 160, ex_xkusage = 3, ex_nscert = 0, skid = 0x1206a6a5cd20, akid = 0x120699a98880, policy_cache = 0x0, crldp = 0x12068875b3a0, altname = 0x12068875b0a0, nc = 0x0, sha1_hash = "â[iÊ\205@äÅÛ\aäOã\v ²1B\022¿", aux = 0x0} (gdb) p cb $3 = (int (*)(int, X509_STORE_CTX *)) 0x1207405f1fc0 So it's trying to call 0x1207405f1fc0 which is the function pointer stored in verify_cb.