Whamcloud - gitweb
LU-14195 libcfs: switch to kfree_sensitive 08/40908/5
authorMr NeilBrown <neilb@suse.de>
Wed, 9 Dec 2020 01:49:13 +0000 (12:49 +1100)
committerOleg Drokin <green@whamcloud.com>
Tue, 6 Apr 2021 03:02:19 +0000 (03:02 +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.

Test-Parameters: trivial
Signed-off-by: Mr NeilBrown <neilb@suse.de>
Change-Id: If665168477a0b6241a8ddf31a111cd465fe97783
Reviewed-on: https://review.whamcloud.com/40908
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: James Simmons <jsimmons@infradead.org>
Reviewed-by: Petros Koutoupis <petros.koutoupis@hpe.com>
Reviewed-by: Oleg Drokin <green@whamcloud.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 d3dcc6c..a4abdd2 100644 (file)
@@ -1378,6 +1378,26 @@ kernel_setsockopt_exists, [
 EXTRA_KCFLAGS="$tmp_flags"
 ]) # LIBCFS_KERNEL_SETSOCKOPT
 
+#
+# 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], [] )
 AC_DEFUN([LIBCFS_PROG_LINUX_RESULTS], [])
 
@@ -1492,6 +1512,8 @@ LIBCFS_KALLSYMS_LOOKUP
 LIBCFS_HAVE_MMAP_LOCK
 LIBCFS_KERNEL_SETSOCKOPT
 LIBCFS_VMALLOC_2ARGS
+# 5.10
+LIBCFS_HAVE_KFREE_SENSITIVE
 ]) # LIBCFS_PROG_LINUX
 
 #
index 69d027f..52b25b9 100644 (file)
@@ -137,4 +137,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;
 }