Whamcloud - gitweb
LU-14195 libcfs: switch to kfree_sensitive
authorMr NeilBrown <neilb@suse.de>
Tue, 6 Jul 2021 00:15:47 +0000 (17:15 -0700)
committerLi Xi <lixi@ddn.com>
Tue, 13 Jul 2021 08:23:06 +0000 (08:23 +0000)
In Linux 5.10, kzfree() has been renamed kfree_sensitive().

So switch to the new name and provide back-compat support for older
kernels.

Lustre-change: https://review.whamcloud.com/40908
Lustre-commit: 67d17dd590f913643f5adc8aced369221faccf05

Test-Parameters: trivial
Signed-off-by: Mr NeilBrown <neilb@suse.de>
Change-Id: If665168477a0b6241a8ddf31a111cd465fe97783
Reviewed-by: James Simmons <jsimmons@infradead.org>
Reviewed-by: Petros Koutoupis <petros.koutoupis@hpe.com>
Reviewed-on: https://review.whamcloud.com/44144
Tested-by: jenkins <devops@whamcloud.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: Sebastien Buisson <sbuisson@ddn.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Li Xi <lixi@ddn.com>
libcfs/autoconf/lustre-libcfs.m4
libcfs/include/libcfs/linux/linux-mem.h
libcfs/libcfs/crypto/keyring.c
libcfs/libcfs/crypto/keysetup_v1.c

index 8631390..358167b 100644 (file)
@@ -1461,6 +1461,26 @@ security_release_secctx_1arg, [
 ])
 ]) # LIBCFS_SEC_RELEASE_SECCTX
 
+#
+# LIBCFS_HAVE_KFREE_SENSITIVE
+#
+# kernel v5.10-rc1~3
+# mm: remove kzfree() compatibility definition
+#
+AC_DEFUN([LIBCFS_HAVE_KFREE_SENSITIVE], [
+LB_CHECK_COMPILE([if kfree_sensitive() is available],
+kfree_sensitive_exists, [
+       #include <linux/slab.h>
+
+],[
+       kfree_sensitive(NULL);
+],[
+       AC_DEFINE(HAVE_KFREE_SENSITIVE, 1,
+               [kfree_sensitive() is available.])
+])
+EXTRA_KCFLAGS="$tmp_flags"
+]) # LIBCFS_HAVE_NR_UNSTABLE_NFS
+
 AC_DEFUN([LIBCFS_PROG_LINUX_SRC], [
        LIBCFS_SRC_HAVE_PROC_OPS
 
@@ -1588,6 +1608,8 @@ LIBCFS_HAVE_MMAP_LOCK
 LIBCFS_KERNEL_SETSOCKOPT
 LIBCFS_VMALLOC_2ARGS
 LIBCFS_SEC_RELEASE_SECCTX
+# 5.10
+LIBCFS_HAVE_KFREE_SENSITIVE
 ]) # LIBCFS_PROG_LINUX
 
 #
index 3aab43b..e6d0e40 100644 (file)
@@ -188,4 +188,8 @@ static inline void mmap_read_unlock(struct mm_struct *mm)
 #define __ll_vmalloc(size, flags) __vmalloc(size, flags, PAGE_KERNEL)
 #endif
 
+#ifndef HAVE_KFREE_SENSITIVE
+#define kfree_sensitive(x)      kzfree(x)
+#endif
+
 #endif /* __LINUX_CFS_MEM_H__ */
index 6b9f693..358dda2 100644 (file)
@@ -52,7 +52,7 @@ static void free_master_key(struct llcrypt_master_key *mk)
                crypto_free_skcipher(mk->mk_mode_keys[i]);
 
        key_put(mk->mk_users);
-       kzfree(mk);
+       kfree_sensitive(mk);
 }
 
 static inline bool valid_key_spec(const struct llcrypt_key_specifier *spec)
index d26735e..e56bce3 100644 (file)
@@ -159,7 +159,7 @@ static void free_direct_key(struct llcrypt_direct_key *dk)
 {
        if (dk) {
                crypto_free_skcipher(dk->dk_ctfm);
-               kzfree(dk);
+               kfree_sensitive(dk);
        }
 }
 
@@ -308,7 +308,7 @@ static int setup_v1_file_key_derived(struct llcrypt_info *ci,
 
        err = llcrypt_set_derived_key(ci, derived_key);
 out:
-       kzfree(derived_key);
+       kfree_sensitive(derived_key);
        return err;
 }