]> git.ipfire.org Git - thirdparty/openssl.git/commitdiff
Fixes AES optimisations for Fujitsu M10 cause SEGV #29085
authorJan Damborsky <dambi@tio.cz>
Tue, 14 Apr 2026 06:43:35 +0000 (08:43 +0200)
committerNorbert Pocs <norbertp@openssl.org>
Fri, 17 Apr 2026 10:45:55 +0000 (12:45 +0200)
Fixes off-by-one error in AES optimisations for Fujitsu Sparc CPUs.

Reviewed-by: Tomas Mraz <tomas@openssl.foundation>
Reviewed-by: Shane Lontis <shane.lontis@oracle.com>
Reviewed-by: Paul Dale <paul.dale@oracle.com>
MergeDate: Fri Apr 17 10:46:01 2026
(Merged from https://github.com/openssl/openssl/pull/30814)

crypto/aes/asm/aesfx-sparcv9.pl

index 34d1fff3d8e81cf7a52623dd0953a4d92fa29290..8a307e1f60ed30622e24291f4b3f360d6f520f97 100644 (file)
@@ -479,11 +479,16 @@ aes_fx_cbc_encrypt:
        ldd             [$end + 24], %f12
 
        movrz           $len, 0, $inc
+
+       brz,pn          $len, .Lcbc_enc_skip_load
+       nop
+
        fmovd           $intail, $in0
        ldd             [$inp - 8], $in1        ! load next input block
        ldda            [$inp]0x82, $intail     ! non-faulting load
        add             $inp, $inc, $inp        ! inp+=16
 
+.Lcbc_enc_skip_load:
        fmovd           %f0, %f4
        faesencx        %f2, %f6, %f0
        faesencx        %f4, %f8, %f2
@@ -694,11 +699,16 @@ aes_fx_cbc_encrypt:
        fmovd           $in1, $iv1
 
        movrz           $len, 0, $inc
+
+       brz,pn          $len, .Lcbc_dec_skip_load
+       nop
+
        fmovd           $intail, $in0
        ldd             [$inp - 8], $in1        ! load next input block
        ldda            [$inp]0x82, $intail     ! non-faulting load
        add             $inp, $inc, $inp        ! inp+=16
 
+.Lcbc_dec_skip_load:
        fmovd           %f0, %f4
        faesdecx        %f2, %f10, %f0
        faesdecx        %f4, %f12, %f2
@@ -953,11 +963,16 @@ aes_fx_ctr32_encrypt_blocks:
        fxor            $in1, $rllo, %f8
 
        movrz           $len, 0, $inc
+
+       brz,pn          $len, .Lctr32_enc_skip_load
+       nop
+
        fmovd           $intail, $in0
        ldd             [$inp - 8], $in1        ! load next input block
        ldda            [$inp]0x82, $intail     ! non-faulting load
        add             $inp, $inc, $inp        ! inp+=16
 
+.Lctr32_enc_skip_load:
        fmovd           %f0, %f4
        faesencx        %f2, %f10, %f0
        faesencx        %f4, %f12, %f2