As said by Linus: A symmetric naming is only helpful if it implies symmetries in use. Otherwise it's actively misleading. In "kzalloc()", the z is meaningful and an important part of what the caller wants. In "kzfree()", the z is actively detrimental, because maybe in the future we really _might_ want to use that "memfill(0xdeadbeef)" or something. The "zero" part of the interface isn't even _relevant_. The main reason that kzfree() exists is to clear sensitive information that should not be leaked to other future users of the same memory objects. Rename kzfree() to kfree_sensitive() to follow the example of the recently added kvfree_sensitive() and make the intention of the API more explicit. In addition, memzero_explicit() is used to clear the memory to make sure that it won't get optimized away by the compiler. The renaming is done by using the command sequence: git grep -w --name-only kzfree |\ xargs sed -i 's/kzfree/kfree_sensitive/' followed by some editing of the kfree_sensitive() kerneldoc and adding a kzfree backward compatibility macro in slab.h. [akpm@linux-foundation.org: fs/crypto/inline_crypt.c needs linux/slab.h] [akpm@linux-foundation.org: fix fs/crypto/inline_crypt.c some more]
Showing the changes to include/linux (1 of 114 files). Show all
Unified · Split
| @@ -186,10 +186,12 @@ void memcg_deactivate_kmem_caches(struct mem_cgroup *, struct mem_cgroup *); · 185 unmodified lines | |||
| 186 | */ | 186 | */ |
| 187 | void * __must_check krealloc(const void *, size_t, gfp_t); | 187 | void * __must_check krealloc(const void *, size_t, gfp_t); |
| 188 | void kfree(const void *); | 188 | void kfree(const void *); |
| 189 | void kzfree(const void *); | 189 | void kfree_sensitive(const void *); |
| 190 | size_t __ksize(const void *); | 190 | size_t __ksize(const void *); |
| 191 | size_t ksize(const void *); | 191 | size_t ksize(const void *); |
| 192 | 192 | ||
| 193 | #define kzfree(x) kfree_sensitive(x) /* For backward compatibility */ | ||
| 194 | |||
| 193 | #ifdef CONFIG_HAVE_HARDENED_USERCOPY_ALLOCATOR | 195 | #ifdef CONFIG_HAVE_HARDENED_USERCOPY_ALLOCATOR |
| 194 | void __check_heap_object(const void *ptr, unsigned long n, struct page *page, | 196 | void __check_heap_object(const void *ptr, unsigned long n, struct page *page, |
| 195 | bool to_user); | 197 | bool to_user); |