Patch "powerpc/crypto/chacha-p10: Fix failure on non Power10" has been added to the 6.8-stable tree

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

 



This is a note to let you know that I've just added the patch titled

    powerpc/crypto/chacha-p10: Fix failure on non Power10

to the 6.8-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     powerpc-crypto-chacha-p10-fix-failure-on-non-power10.patch
and it can be found in the queue-6.8 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit d876049271b572627d18933557194cc6093926ca
Author: Michael Ellerman <mpe@xxxxxxxxxxxxxx>
Date:   Fri Mar 29 00:02:00 2024 +1100

    powerpc/crypto/chacha-p10: Fix failure on non Power10
    
    [ Upstream commit 69630926011c1f7170a465b7b5c228deb66e9372 ]
    
    The chacha-p10-crypto module provides optimised chacha routines for
    Power10. It also selects CRYPTO_ARCH_HAVE_LIB_CHACHA which says it
    provides chacha_crypt_arch() to generic code.
    
    Notably the module needs to provide chacha_crypt_arch() regardless of
    whether it is loaded on Power10 or an older CPU.
    
    The implementation of chacha_crypt_arch() already has a fallback to
    chacha_crypt_generic(), however the module as a whole fails to load on
    pre-Power10, because of the use of module_cpu_feature_match().
    
    This breaks for example loading wireguard:
    
      jostaberry-1:~ # modprobe -v wireguard
      insmod /lib/modules/6.8.0-lp155.8.g7e0e887-default/kernel/arch/powerpc/crypto/chacha-p10-crypto.ko.zst
      modprobe: ERROR: could not insert 'wireguard': No such device
    
    Fix it by removing module_cpu_feature_match(), and instead check the
    CPU feature manually. If the CPU feature is not found, the module
    still loads successfully, but doesn't register the Power10 specific
    algorithms. That allows chacha_crypt_generic() to remain available for
    use, fixing the problem.
    
      [root@fedora ~]# modprobe -v wireguard
      insmod /lib/modules/6.8.0-00001-g786a790c4d79/kernel/net/ipv4/udp_tunnel.ko
      insmod /lib/modules/6.8.0-00001-g786a790c4d79/kernel/net/ipv6/ip6_udp_tunnel.ko
      insmod /lib/modules/6.8.0-00001-g786a790c4d79/kernel/lib/crypto/libchacha.ko
      insmod /lib/modules/6.8.0-00001-g786a790c4d79/kernel/arch/powerpc/crypto/chacha-p10-crypto.ko
      insmod /lib/modules/6.8.0-00001-g786a790c4d79/kernel/lib/crypto/libchacha20poly1305.ko
      insmod /lib/modules/6.8.0-00001-g786a790c4d79/kernel/drivers/net/wireguard/wireguard.ko
      [   18.910452][  T721] wireguard: allowedips self-tests: pass
      [   18.914999][  T721] wireguard: nonce counter self-tests: pass
      [   19.029066][  T721] wireguard: ratelimiter self-tests: pass
      [   19.029257][  T721] wireguard: WireGuard 1.0.0 loaded. See www.wireguard.com for information.
      [   19.029361][  T721] wireguard: Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@xxxxxxxxx>. All Rights Reserved.
    
    Reported-by: Michal Suchánek <msuchanek@xxxxxxx>
    Closes: https://lore.kernel.org/all/20240315122005.GG20665@xxxxxxxxxxxxxxx/
    Acked-by: Herbert Xu <herbert@xxxxxxxxxxxxxxxxxxx>
    Signed-off-by: Michael Ellerman <mpe@xxxxxxxxxxxxxx>
    Link: https://msgid.link/20240328130200.3041687-1-mpe@xxxxxxxxxxxxxx
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/arch/powerpc/crypto/chacha-p10-glue.c b/arch/powerpc/crypto/chacha-p10-glue.c
index 74fb86b0d2097..7c728755852e1 100644
--- a/arch/powerpc/crypto/chacha-p10-glue.c
+++ b/arch/powerpc/crypto/chacha-p10-glue.c
@@ -197,6 +197,9 @@ static struct skcipher_alg algs[] = {
 
 static int __init chacha_p10_init(void)
 {
+	if (!cpu_has_feature(CPU_FTR_ARCH_31))
+		return 0;
+
 	static_branch_enable(&have_p10);
 
 	return crypto_register_skciphers(algs, ARRAY_SIZE(algs));
@@ -204,10 +207,13 @@ static int __init chacha_p10_init(void)
 
 static void __exit chacha_p10_exit(void)
 {
+	if (!static_branch_likely(&have_p10))
+		return;
+
 	crypto_unregister_skciphers(algs, ARRAY_SIZE(algs));
 }
 
-module_cpu_feature_match(PPC_MODULE_FEATURE_P10, chacha_p10_init);
+module_init(chacha_p10_init);
 module_exit(chacha_p10_exit);
 
 MODULE_DESCRIPTION("ChaCha and XChaCha stream ciphers (P10 accelerated)");




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux