Andy Polyakov via RT a écrit : > Hi, Hello,
>> I see a very strange bug in crypto/sparcv9cap.c. OpenSSL 1.0.0d checks >> sparc capabilities with SIGILL signal. On sparc64 (both Linux and >> solaris, with UltraSPARC III+ and T1 CPU's), SIGILL handler is called >> and program terminates with SIGILL in _sparcv9_fmadd_probe: >> >> 00000001002a32d0<_sparcv9_fmadd_probe>: >> 1002a32d0: 81 b0 0d 80 impdep1 108, %f0, %f0, %f0 >> 1002a32d4: 85 b0 8d 82 impdep1 108, %f2, %f2, %f2 >> 1002a32d8: 81 c3 e0 08 retl >> 1002a32dc: 81 b8 04 40 impdep2 34, %f0, %f0, %f0<= here >> >> If I add printf() in signal handler, I see that it is called, and that >> siglongjmp() works. With my printf(), my program doesn't abort with >> SIGILL anymore but with SIGBUS (?!). > > Could you 'truss -v sigaction,sigprocmask apps/openssl version' and > submit output? I cannot. My server doesn't run Solaris but Linux/sparc. I just have seen the same bug a long time ago on Solaris but I don't have any solaris server anymore. >> Modifications : >> static void common_handler(int sig) >> { printf("Signal handler\n"); siglongjmp(common_jmp,sig); } >> >> I don't understand why, with this trivial modification, my program run >> fine (and of course prints "Signal handler" on stdout). > > I don't understand. First use say that it fails with SIBUS (instead of > expected SIGILL) and then you say that program runs fine. Could you be > kind to clarify? OpenSSL uses SIGILL signal handler to check processor capabilities. Out of the box, OpenSSL library aborts during initialization with SIGILL. And if you check inside sources, you'll see that this SIGILL has to be catch by a signal handler. To debug, I have added a simple printf() in this signal handler and I have seen that it is called when SIGILL is raised. But I obtain a new SIGBUS signal (!). >> I have seen this bug some months ago (dec 2010) on a sparc T1 running >> Solaris, but I'm not able to remember how I have fixed this trouble... > > But do you have binary left? In worst case one (I) can disassemble it > and identify the change... Not that I really understand what's going on, > as I can't reproduce the problem on UltraSPARC-IIe and III... I don't have, sorry. But I'm pretty sure that this bug is in sparc assembly. Regards, JKB ______________________________________________________________________ OpenSSL Project http://www.openssl.org Development Mailing List openssl-dev@openssl.org Automated List Manager majord...@openssl.org