NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

port-sparc/57594: openssl speed crashes on sparcv8



>Number:         57594
>Category:       port-sparc
>Synopsis:       openssl speed crashes on sparcv8
>Confidential:   no
>Severity:       critical
>Priority:       high
>Responsible:    port-sparc-maintainer
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Mon Aug 28 16:30:00 +0000 2023
>Originator:     Martin Husemann
>Release:        NetBSD 10.99.7
>Organization:
The NetBSD Foundation, Inc.
>Environment:
System: NetBSD somnambulist.duskware.de 10.99.7 NetBSD 10.99.7 (SOMNA) #18: Mon Aug 28 12:28:48 CEST 2023 martin%seven-days-to-the-wolves.aprisoft.de@localhost:/work/src/sys/arch/sparc/compile/SOMNA sparc
Architecture: sparc
Machine: sparc
>Description:

Running "openssl speed" crashes after some time:

[..]
Doing 192 bits  ecdh's for 10s: 18 192-bits ECDH ops in 10.22s
Doing 224 bits  ecdh's for 10s: 12 224-bits ECDH ops in 9.71s
Doing 256 bits  ecdh's for 10s: 8 256-bits ECDH ops in 10.68s
Illegal instruction (core dumped)

and gdb shows it is here:

Program terminated with signal SIGILL, Illegal instruction.
#0  0x00212650 in OPENSSL_cleanse ()
(gdb) x/i $pc
=> 0x212650 <OPENSSL_cleanse+112>:      unknown

which is with a bit more context:

   0x212638 <OPENSSL_cleanse+88>:       be  0x212650 <OPENSSL_cleanse+112>
   0x21263c <OPENSSL_cleanse+92>:       nop 
   0x212640 <OPENSSL_cleanse+96>:       clrb  [ %o0 ]
   0x212644 <OPENSSL_cleanse+100>:      dec  %o1
   0x212648 <OPENSSL_cleanse+104>:      b  0x212634 <OPENSSL_cleanse+84>
   0x21264c <OPENSSL_cleanse+108>:      inc  %o0
=> 0x212650 <OPENSSL_cleanse+112>:      unknown
   0x212654 <OPENSSL_cleanse+116>:      sub  %o1, 8, %o1
   0x212658 <OPENSSL_cleanse+120>:      btst  -8, %o1

and the source is crypto/external/bsd/openssl/dist/crypto/sparccpuid.S
line 406: the "stx" encoded as .word   0xc0720000:

.Lot:
#ifndef ABI64
        subcc   %g0,1,%g1
        ! see above for explanation
        .word   0x83408000      !rd     %ccr,%g1
        cmp     %g1,0x99
        bne     .v8lot
        nop
#endif

.v9lot: andcc   %o0,7,%g0
        bz      .v9aligned
        nop
        stb     %g0,[%o0]
        sub     %o1,1,%o1
        ba      .v9lot
        add     %o0,1,%o0
.align  16,0x01000000
.v9aligned:
        .word   0xc0720000      !stx    %g0,[%o0]
        sub     %o1,8,%o1
        andcc   %o1,-8,%g0
#ifdef ABI64
        .word   0x126ffffd      !bnz    %xcc,.v9aligned
#else
        .word   0x124ffffd      !bnz    %icc,.v9aligned
#endif

I totally fail to see why this can be used w/o #ifdef ABI64 here
(and obviously it can't). Merge botch?


>How-To-Repeat:
s/a

>Fix:
n/a



Home | Main Index | Thread Index | Old Index