]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
crypto: padlock-sha - Disable for Zhaoxin processor
authorAlanSong-oc <AlanSong-oc@zhaoxin.com>
Fri, 13 Mar 2026 08:01:49 +0000 (16:01 +0800)
committerEric Biggers <ebiggers@kernel.org>
Sat, 14 Mar 2026 18:34:06 +0000 (11:34 -0700)
For Zhaoxin processors, the XSHA1 instruction requires the total memory
allocated at %rdi register must be 32 bytes, while the XSHA1 and
XSHA256 instruction doesn't perform any operation when %ecx is zero.

Due to these requirements, the current padlock-sha driver does not work
correctly with Zhaoxin processors. It cannot pass the self-tests and
therefore does not activate the driver on Zhaoxin processors. This issue
has been reported in Debian [1]. The self-tests fail with the
following messages [2]:

alg: shash: sha1-padlock-nano test failed (wrong result) on test vector 0, cfg="init+update+final aligned buffer"
alg: self-tests for sha1 using sha1-padlock-nano failed (rc=-22)

alg: shash: sha256-padlock-nano test failed (wrong result) on test vector 0, cfg="init+update+final aligned buffer"
alg: self-tests for sha256 using sha256-padlock-nano failed (rc=-22)

Disable the padlock-sha driver on Zhaoxin processors with the CPU family
0x07 and newer. Following the suggestion in [3], support for PHE will be
added to lib/crypto/ instead.

[1] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1113996
[2] https://linux-hardware.org/?probe=271fabb7a4&log=dmesg
[3] https://lore.kernel.org/linux-crypto/aUI4CGp6kK7mxgEr@gondor.apana.org.au/

Fixes: 63dc06cd12f9 ("crypto: padlock-sha - Use API partial block handling")
Cc: stable@vger.kernel.org
Signed-off-by: AlanSong-oc <AlanSong-oc@zhaoxin.com>
Link: https://lore.kernel.org/r/20260313080150.9393-2-AlanSong-oc@zhaoxin.com
Signed-off-by: Eric Biggers <ebiggers@kernel.org>
drivers/crypto/padlock-sha.c

index 329f60ad422e6fbec8639278a592561a8607c33d..9214bbfc868f5dbf2331bf9c24748c236c7863e3 100644 (file)
@@ -332,6 +332,13 @@ static int __init padlock_init(void)
        if (!x86_match_cpu(padlock_sha_ids) || !boot_cpu_has(X86_FEATURE_PHE_EN))
                return -ENODEV;
 
+       /*
+        * Skip family 0x07 and newer used by Zhaoxin processors,
+        * as the driver's self-tests fail on these CPUs.
+        */
+       if (c->x86 >= 0x07)
+               return -ENODEV;
+
        /* Register the newly added algorithm module if on *
        * VIA Nano processor, or else just do as before */
        if (c->x86_model < 0x0f) {