#53885 closed defect (wontfix)
openssl crashes svn on ppc due to asm code in OPENSSL_crypto207_probe ()
| Reported by: | kencu (Ken) | Owned by: | |
|---|---|---|---|
| Priority: | Normal | Milestone: | |
| Component: | ports | Version: | |
| Keywords: | powerpc | Cc: | neverpanic (Clemens Lang), larryv (Lawrence Velázquez) |
| Port: | openssl |
Description
Stumbled across this chasing down a crashing bug in svn on Tiger (same thing happens on Leopard PPC).
Host Name: tigerg5
Date/Time: 2017-03-29 12:06:17.692 -0700
OS Version: 10.4.11 (Build 8S165)
Report Version: 4
Command: svn
Path: /opt/local/bin/svn
Parent: bash [2829]
Version: ??? (???)
PID: 2831
Thread: 0
Exception: EXC_BAD_INSTRUCTION (0x0002)
Code[0]: 0x00000002
Code[1]: 0x01185920
Thread 0 Crashed:
0 libcrypto.1.0.0.dylib 0x01185920 OPENSSL_crypto207_probe + 0
1 libcrypto.1.0.0.dylib 0x01185cec OPENSSL_cpuid_setup + 360
2 libcrypto.1.0.0.dylib 0x0122e608 OPENSSL_add_all_algorithms_noconf + 20
3 libsrp.plugin 0x01646fa4 srp_client_plug_init + 88
4 libsasl2.dylib 0x004b5384 sasl_client_add_plugin + 84
5 libsasl2.dylib 0x004c1324 _sasl_load_plugins + 1296
6 libsasl2.dylib 0x004b5810 sasl_client_init + 288
7 libsvn_ra_svn-1.0.dylib 0x0049c2dc sasl_init_cb + 60
8 libsvn_subr-1.0.dylib 0x0052a0b0 svn_atomic__init_once + 80
9 libsvn_ra-1.0.dylib 0x000ce290 svn_ra_print_modules + 140
10 svn 0x00012a98 svn_cl__help + 448
11 svn 0x0001eca8 main + 544
12 svn 0x0000b09c _start + 760
13 svn 0x0000ada0 start + 48
Thread 0 crashed with PPC Thread State 64:
srr0: 0x0000000001185920 srr1: 0x100000000208f030 vrsave: 0x0000000000000000
cr: 0x24008402 xer: 0x0000000000000000 lr: 0x0000000001185cec ctr: 0x00000000900019c0
r0: 0x0000000000000000 r1: 0x00000000bfffd620 r2: 0x0000000000000003 r3: 0x0000000000000000
r4: 0x0000000000000000 r5: 0x0000000001185ce0 r6: 0x00000000012fac18 r7: 0x00000000000000ff
r8: 0x00000000012fac04 r9: 0x00000000012f5b8c r10: 0x000000000000000e r11: 0x00000000012e744c
r12: 0x00000000900019c0 r13: 0x00000000bfffe007 r14: 0x00000000bfffdc04 r15: 0x00000000bfffe001
r16: 0x00000000bfffe004 r17: 0x00000000004c4d08 r18: 0x00000000bfffd7f8 r19: 0x00000000bfffe806
r20: 0x00000000bfffd804 r21: 0x00000000004c533c r22: 0x0000000000000015 r23: 0x0000000000000015
r24: 0x00000000bfffdc04 r25: 0x00000000004c51d4 r26: 0x00000000bfffd778 r27: 0x00000000bfffd77c
r28: 0x00000000bfffd780 r29: 0x00000000004c51d4 r30: 0x00000000fffff927 r31: 0x0000000001185b8c
Binary Images Description:
0x1000 - 0x39fff svn /opt/local/bin/svn
0x47000 - 0x4bfff libsvn_fs_util-1.0.dylib /opt/local/lib/libsvn_fs_util-1.0.dylib
0x4e000 - 0x50fff libanonymous.plugin /opt/local/lib/sasl2/libanonymous.plugin
0x61000 - 0xb3fff libsvn_client-1.0.dylib /opt/local/lib/libsvn_client-1.0.dylib
0xc2000 - 0xd1fff libsvn_ra-1.0.dylib /opt/local/lib/libsvn_ra-1.0.dylib
0xd6000 - 0xe8fff libsvn_diff-1.0.dylib /opt/local/lib/libsvn_diff-1.0.dylib
0xee000 - 0xf8fff libsvn_ra_local-1.0.dylib /opt/local/lib/libsvn_ra_local-1.0.dylib
0x205000 - 0x288fff libsvn_wc-1.0.dylib /opt/local/lib/libsvn_wc-1.0.dylib
0x29a000 - 0x2c5fff libsvn_repos-1.0.dylib /opt/local/lib/libsvn_repos-1.0.dylib
0x2cf000 - 0x2dafff libsvn_fs-1.0.dylib /opt/local/lib/libsvn_fs-1.0.dylib
0x2df000 - 0x31bfff libsvn_fs_fs-1.0.dylib /opt/local/lib/libsvn_fs_fs-1.0.dylib
0x328000 - 0x366fff libsvn_fs_x-1.0.dylib /opt/local/lib/libsvn_fs_x-1.0.dylib
0x373000 - 0x396fff libsvn_fs_base-1.0.dylib /opt/local/lib/libsvn_fs_base-1.0.dylib
0x39f000 - 0x47cfff libdb-4.6.dylib /opt/local/lib/db46/libdb-4.6.dylib
0x490000 - 0x4a8fff libsvn_ra_svn-1.0.dylib /opt/local/lib/libsvn_ra_svn-1.0.dylib
0x4b0000 - 0x4c4fff libsasl2.dylib /opt/local/lib/libsasl2.dylib
0x4ca000 - 0x4eafff libsvn_ra_serf-1.0.dylib /opt/local/lib/libsvn_ra_serf-1.0.dylib
0x4f7000 - 0x509fff libserf-1.dylib /opt/local/lib/libserf-1.dylib
0x511000 - 0x520fff libsvn_delta-1.0.dylib /opt/local/lib/libsvn_delta-1.0.dylib
0x526000 - 0x5affff libsvn_subr-1.0.dylib /opt/local/lib/libsvn_subr-1.0.dylib
0x610000 - 0x634fff libexpat.1.dylib /opt/local/lib/libexpat.1.dylib
0x63b000 - 0x64cfff libz.1.dylib /opt/local/lib/libz.1.dylib
0x650000 - 0x725fff libsqlite3.0.dylib /opt/local/lib/libsqlite3.0.dylib
0x73d000 - 0x75afff libmagic.1.dylib /opt/local/lib/libmagic.1.dylib
0x760000 - 0x779fff libaprutil-1.0.dylib /opt/local/lib/libaprutil-1.0.dylib
0x783000 - 0x7a1fff libapr-1.0.dylib /opt/local/lib/libapr-1.0.dylib
0x7ac000 - 0x7b5fff libintl.8.dylib /opt/local/lib/libintl.8.dylib
0x7b9000 - 0x7c3fff libgcc_s.1.dylib /opt/local/lib/libgcc/libgcc_s.1.dylib
0x7ef000 - 0x7f1fff libcrammd5.plugin /opt/local/lib/sasl2/libcrammd5.plugin
0x7f4000 - 0x7f9fff libgs2.plugin /opt/local/lib/sasl2/libgs2.plugin
0x1008000 - 0x1100fff libiconv.2.dylib /opt/local/lib/libiconv.2.dylib
0x110c000 - 0x115afff libssl.1.0.0.dylib /opt/local/lib/libssl.1.0.0.dylib
0x1180000 - 0x12e6fff libcrypto.1.0.0.dylib /opt/local/lib/libcrypto.1.0.0.dylib
0x13d5000 - 0x13dffff libdigestmd5.plugin /opt/local/lib/sasl2/libdigestmd5.plugin
0x13e2000 - 0x13f3fff libk5crypto.3.1.dylib /opt/local/lib/libk5crypto.3.1.dylib
0x13fa000 - 0x13fbfff libcom_err.1.1.dylib /opt/local/lib/libcom_err.1.1.dylib
0x1505000 - 0x1535fff libgssapi_krb5.2.2.dylib /opt/local/lib/libgssapi_krb5.2.2.dylib
0x1542000 - 0x15c7fff libkrb5.3.3.dylib /opt/local/lib/libkrb5.3.3.dylib
0x15f9000 - 0x15fffff libkrb5support.1.1.dylib /opt/local/lib/libkrb5support.1.1.dylib
0x1603000 - 0x1608fff libgssapiv2.plugin /opt/local/lib/sasl2/libgssapiv2.plugin
0x160b000 - 0x160dfff liblogin.plugin /opt/local/lib/sasl2/liblogin.plugin
0x1610000 - 0x1615fff libntlm.plugin /opt/local/lib/sasl2/libntlm.plugin
0x1618000 - 0x1620fff libotp.plugin /opt/local/lib/sasl2/libotp.plugin
0x1629000 - 0x162bfff libplain.plugin /opt/local/lib/sasl2/libplain.plugin
0x162e000 - 0x1639fff libsasldb.plugin /opt/local/lib/sasl2/libsasldb.plugin
0x163d000 - 0x1643fff libscram.plugin /opt/local/lib/sasl2/libscram.plugin
0x1646000 - 0x164efff libsrp.plugin /opt/local/lib/sasl2/libsrp.plugin
0x8fe00000 - 0x8fe52fff dyld 46.16 /usr/lib/dyld
0x90000000 - 0x901bcfff libSystem.B.dylib /usr/lib/libSystem.B.dylib
0x90214000 - 0x90219fff libmathCommon.A.dylib /usr/lib/system/libmathCommon.A.dylib
0x907bb000 - 0x90895fff com.apple.CoreFoundation 6.4.11 (368.35) /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation
0x908de000 - 0x908defff com.apple.CoreServices 10.4 (???) /System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServices
0x908e0000 - 0x909e2fff libicucore.A.dylib /usr/lib/libicucore.A.dylib
0x90a3c000 - 0x90ac0fff libobjc.A.dylib /usr/lib/libobjc.A.dylib
0x90aea000 - 0x90b5cfff com.apple.framework.IOKit 1.4 (???) /System/Library/Frameworks/IOKit.framework/Versions/A/IOKit
0x90b72000 - 0x90b84fff libauto.dylib /usr/lib/libauto.dylib
0x90b8b000 - 0x90e62fff com.apple.CoreServices.CarbonCore 681.19 (681.21) /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/CarbonCore.framework/Versions/A/CarbonCore
0x90ec8000 - 0x90f48fff com.apple.CoreServices.OSServices 4.1 /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/OSServices.framework/Versions/A/OSServices
0x90f92000 - 0x90fd4fff com.apple.CFNetwork 4.0 (129.24) /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/CFNetwork.framework/Versions/A/CFNetwork
0x90fe9000 - 0x91001fff com.apple.WebServices 1.1.2 (1.1.0) /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/WebServicesCore.framework/Versions/A/WebServicesCore
0x91011000 - 0x91092fff com.apple.SearchKit 1.0.8 /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/SearchKit.framework/Versions/A/SearchKit
0x910d8000 - 0x91101fff com.apple.Metadata 10.4.4 (121.36) /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/Metadata.framework/Versions/A/Metadata
0x91112000 - 0x91120fff libz.1.dylib /usr/lib/libz.1.dylib
0x91123000 - 0x912defff com.apple.security 4.6 (29770) /System/Library/Frameworks/Security.framework/Versions/A/Security
0x913dd000 - 0x913e6fff com.apple.DiskArbitration 2.1.2 /System/Library/Frameworks/DiskArbitration.framework/Versions/A/DiskArbitration
0x913ed000 - 0x913f5fff libbsm.dylib /usr/lib/libbsm.dylib
0x913f9000 - 0x91421fff com.apple.SystemConfiguration 1.8.3 /System/Library/Frameworks/SystemConfiguration.framework/Versions/A/SystemConfiguration
0x91434000 - 0x9143ffff libgcc_s.1.dylib /usr/lib/libgcc_s.1.dylib
0x9506a000 - 0x95087fff libresolv.9.dylib /usr/lib/libresolv.9.dylib
0x969a2000 - 0x969b5fff libpam.1.dylib /usr/lib/libpam.1.dylib
The assembly code for this call is in openssl/ppccpuil.pl. It looks to me like it might be ppc64 code.
Disabling assembly code by adding this in the os.major <= 9 block:
append merger_configure_args(ppc) { no-asm}
fixes the svn crash.
I'm not certain this needs to be fixed generally. I haven't seen this crash with anything else, so perhaps leaving the asm code in there is the better option generally for performance for web servers, etc.
Attachments (1)
Change History (9)
comment:1 Changed 9 years ago by kencu (Ken)
comment:2 Changed 9 years ago by kencu (Ken)
I wonder if this asm code is Power8-specific: <https://www.ibm.com/developerworks/library/se-power8-in-core-cryptography/index.html>
comment:3 Changed 9 years ago by neverpanic (Clemens Lang)
Can you provide a patch that makes the proposed change, ideally in a pull request against https://github.com/macports/macports-ports?
I don't object to the change, but cannot test on old PPC platforms and would rather not spend too much time with them.
comment:4 Changed 9 years ago by kencu (Ken)
I'm just going to ask <https://github.com/openssl/openssl/issues/3096> if there is a way to include the "good" PPC asm and leave out the "bad" Power8 specific parts.
comment:5 Changed 9 years ago by kencu (Ken)
There appear to be differences between MacOS versions - 10.5PPC runs the crypto207 probe code silently, and the bad instruction error is only noted when in the debugger, which is standard expected behaviour when probing for the asm instruction.
on 10.4PPC, it works differently. the crypto207 probe code pops up a dialog box indicating an execution error, and writes a backtrace and debugging info into CrashReporter for a 'bad instruction' error every single time. I suspect this behaviour is not correct based on this discussion, and it was "fixed" in OS 10.5.
So it looks like this "error" can either just be ignored (set CrashReporterPrefs to Server mode) and I can wipe out all the erroneous error logs that collect on 10.4 from time to time, or I could patch the mod207 probe out on 10.4 if I really wanted to. 10.4 is ancient, and not many of us left even try to run it, so not worth more time from you I would say.
I think this ticket can be closed, and the ppc asm code just left in place for performance reasons.
comment:6 Changed 9 years ago by neverpanic (Clemens Lang)
| Resolution: | → wontfix |
|---|---|
| Status: | new → closed |
OK, closing as requested.
comment:7 Changed 9 years ago by kencu (Ken)
Ultimately I think this behaviour on Tiger is due to some inconsistency in the signal handling -- Leopard correctly handles SIGILL during the probes in openssl to not cause a crash. On Tiger however it goes to the default behavour and writes a full crashlog every time the probe fails on the illegal instruction, which is every time any program uses openssl. sigaction does not appear to be picking up the requested change on Tiger.
I thought it might just be a POSIX guard thing in signal.h (these errors are common on Tiger), but the first attempt at that didn't fix it -- so I just #ifdef'd the crashing call out, and now it works correctly.
Changed 9 years ago by kencu (Ken)
| Attachment: | patch-openssl-tiger-ppc-signal-posix.diff added |
|---|
small patch for this error for anyone on TIger who is interested
comment:8 Changed 9 years ago by kencu (Ken)
Oh, hey look -- the openssl people fixed it even better than I did, in trunk. What nice folks!
<https://github.com/openssl/openssl/commit/0bd93bbe4ae60e5f318b298bfe617e468a7b71d0>

sorry, that asm in in
openssl/crypto/ppccpuid.pl.<https://github.com/openssl/openssl/blob/master/crypto/ppccpuid.pl>