]> git.ipfire.org Git - thirdparty/openssl.git/commitdiff
SPARC assembly: Don't file aes-cbc on T4 with small sizes.
authorSebastian Andrzej Siewior <sebastian@breakpoint.cc>
Tue, 8 Oct 2024 20:38:17 +0000 (22:38 +0200)
committerTomas Mraz <tomas@openssl.org>
Fri, 14 Feb 2025 10:42:35 +0000 (11:42 +0100)
The "openssl speed -testmode -seconds 1 -bytes 1 aes-128-cbc" test
revealed that the assembly code is crashing if length is less than 16.
The code shifts the provided length by 4 and than subtracts one until
the length hits zero. If it was already zero then it underflows the
counter and continues until it segfaults on reading or writing.

Replace the check against 0 with less than 15.

Signed-off-by: Sebastian Andrzej Siewior <sebastian@breakpoint.cc>
Reviewed-by: Saša Nedvědický <sashan@openssl.org>
Reviewed-by: Tomas Mraz <tomas@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/25637)

crypto/perlasm/sparcv9_modes.pl

index 76a2727aba62ab6e66b84825823ddbf312482e84..295c6312cc37a9e4a1f7c54b74d7ec3c85ff0a70 100644 (file)
@@ -46,8 +46,8 @@ $::code.=<<___;
 .align 32
 ${alg}${bits}_t4_cbc_encrypt:
        save            %sp, -$::frame, %sp
-       cmp             $len, 0
-       be,pn           $::size_t_cc, .L${bits}_cbc_enc_abort
+       cmp             $len, 15
+       bleu,pn $::size_t_cc, .L${bits}_cbc_enc_abort
        srln            $len, 0, $len           ! needed on v8+, "nop" on v9
        sub             $inp, $out, $blk_init   ! $inp!=$out
 ___
@@ -264,8 +264,8 @@ $::code.=<<___;
 .align 32
 ${alg}${bits}_t4_cbc_decrypt:
        save            %sp, -$::frame, %sp
-       cmp             $len, 0
-       be,pn           $::size_t_cc, .L${bits}_cbc_dec_abort
+       cmp             $len, 15
+       bleu,pn         $::size_t_cc, .L${bits}_cbc_dec_abort
        srln            $len, 0, $len           ! needed on v8+, "nop" on v9
        sub             $inp, $out, $blk_init   ! $inp!=$out
 ___