mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-27 12:57:53 +00:00
lib/string: Make memzero_explicit() inline instead of external
With the use of the barrier implied by barrier_data(), there is no need
for memzero_explicit() to be extern. Making it inline saves the overhead
of a function call, and allows the code to be reused in arch/*/purgatory
without having to duplicate the implementation.
Tested-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Arvind Sankar <nivedita@alum.mit.edu>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Cc: Borislav Petkov <bp@alien8.de>
Cc: H . Peter Anvin <hpa@zytor.com>
Cc: Herbert Xu <herbert@gondor.apana.org.au>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Stephan Mueller <smueller@chronox.de>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: linux-crypto@vger.kernel.org
Cc: linux-s390@vger.kernel.org
Fixes: 906a4bb97f
("crypto: sha256 - Use get/put_unaligned_be32 to get input, memzero_explicit")
Link: https://lkml.kernel.org/r/20191007220000.GA408752@rani.riverdale.lan
Signed-off-by: Ingo Molnar <mingo@kernel.org>
This commit is contained in:
parent
fbcfb8f027
commit
bec5007770
2 changed files with 20 additions and 22 deletions
|
@ -227,7 +227,26 @@ static inline bool strstarts(const char *str, const char *prefix)
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t memweight(const void *ptr, size_t bytes);
|
size_t memweight(const void *ptr, size_t bytes);
|
||||||
void memzero_explicit(void *s, size_t count);
|
|
||||||
|
/**
|
||||||
|
* memzero_explicit - Fill a region of memory (e.g. sensitive
|
||||||
|
* keying data) with 0s.
|
||||||
|
* @s: Pointer to the start of the area.
|
||||||
|
* @count: The size of the area.
|
||||||
|
*
|
||||||
|
* Note: usually using memset() is just fine (!), but in cases
|
||||||
|
* where clearing out _local_ data at the end of a scope is
|
||||||
|
* necessary, memzero_explicit() should be used instead in
|
||||||
|
* order to prevent the compiler from optimising away zeroing.
|
||||||
|
*
|
||||||
|
* memzero_explicit() doesn't need an arch-specific version as
|
||||||
|
* it just invokes the one of memset() implicitly.
|
||||||
|
*/
|
||||||
|
static inline void memzero_explicit(void *s, size_t count)
|
||||||
|
{
|
||||||
|
memset(s, 0, count);
|
||||||
|
barrier_data(s);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* kbasename - return the last part of a pathname.
|
* kbasename - return the last part of a pathname.
|
||||||
|
|
21
lib/string.c
21
lib/string.c
|
@ -748,27 +748,6 @@ void *memset(void *s, int c, size_t count)
|
||||||
EXPORT_SYMBOL(memset);
|
EXPORT_SYMBOL(memset);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
|
||||||
* memzero_explicit - Fill a region of memory (e.g. sensitive
|
|
||||||
* keying data) with 0s.
|
|
||||||
* @s: Pointer to the start of the area.
|
|
||||||
* @count: The size of the area.
|
|
||||||
*
|
|
||||||
* Note: usually using memset() is just fine (!), but in cases
|
|
||||||
* where clearing out _local_ data at the end of a scope is
|
|
||||||
* necessary, memzero_explicit() should be used instead in
|
|
||||||
* order to prevent the compiler from optimising away zeroing.
|
|
||||||
*
|
|
||||||
* memzero_explicit() doesn't need an arch-specific version as
|
|
||||||
* it just invokes the one of memset() implicitly.
|
|
||||||
*/
|
|
||||||
void memzero_explicit(void *s, size_t count)
|
|
||||||
{
|
|
||||||
memset(s, 0, count);
|
|
||||||
barrier_data(s);
|
|
||||||
}
|
|
||||||
EXPORT_SYMBOL(memzero_explicit);
|
|
||||||
|
|
||||||
#ifndef __HAVE_ARCH_MEMSET16
|
#ifndef __HAVE_ARCH_MEMSET16
|
||||||
/**
|
/**
|
||||||
* memset16() - Fill a memory area with a uint16_t
|
* memset16() - Fill a memory area with a uint16_t
|
||||||
|
|
Loading…
Reference in a new issue