From fd21c915a039e04545d4355ab8773d1ceb9f6ef1 Mon Sep 17 00:00:00 2001 From: Johannes Weiner Date: Fri, 20 Feb 2009 15:38:41 -0800 Subject: [PATCH] --- yaml --- r: 131578 b: refs/heads/master c: 3ef0e5ba467366125f04b423f4638baca54a4fc1 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/include/linux/slab.h | 1 + trunk/mm/util.c | 20 ++++++++++++++++++++ 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 1a90dc4fc849..d0e563cccb9a 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: d9190913b71831f5e3d04de62cfb1fd069a9db35 +refs/heads/master: 3ef0e5ba467366125f04b423f4638baca54a4fc1 diff --git a/trunk/include/linux/slab.h b/trunk/include/linux/slab.h index f96d13c281e8..24c5602bee99 100644 --- a/trunk/include/linux/slab.h +++ b/trunk/include/linux/slab.h @@ -127,6 +127,7 @@ int kmem_ptr_validate(struct kmem_cache *cachep, const void *ptr); void * __must_check __krealloc(const void *, size_t, gfp_t); void * __must_check krealloc(const void *, size_t, gfp_t); void kfree(const void *); +void kzfree(const void *); size_t ksize(const void *); /* diff --git a/trunk/mm/util.c b/trunk/mm/util.c index cb00b748ce47..37eaccdf3054 100644 --- a/trunk/mm/util.c +++ b/trunk/mm/util.c @@ -129,6 +129,26 @@ void *krealloc(const void *p, size_t new_size, gfp_t flags) } EXPORT_SYMBOL(krealloc); +/** + * kzfree - like kfree but zero memory + * @p: object to free memory of + * + * The memory of the object @p points to is zeroed before freed. + * If @p is %NULL, kzfree() does nothing. + */ +void kzfree(const void *p) +{ + size_t ks; + void *mem = (void *)p; + + if (unlikely(ZERO_OR_NULL_PTR(mem))) + return; + ks = ksize(mem); + memset(mem, 0, ks); + kfree(mem); +} +EXPORT_SYMBOL(kzfree); + /* * strndup_user - duplicate an existing string from user space * @s: The string to duplicate