mirror of
https://github.com/systemd/systemd.git
synced 2026-08-03 22:50:29 +00:00
boot: Simplify object erasure
This erase_obj() machinery looks like voodoo and creates an awful lot of noise as soon as we get back to building with -O0. We can do this in a more simple way by introducing a struct that holds the information we need on cleanup. When building with optimization enabled, all this gets inlined and the eraser vanishes.
This commit is contained in:
committed by
Lennart Poettering
parent
f977356a82
commit
3f92dc2fd4
@@ -38,21 +38,3 @@ bool memeqbyte(uint8_t byte, const void *data, size_t length) {
|
||||
/* Now we know first 16 bytes match, memcmp() with self. */
|
||||
return memcmp(data, p + 16, length) == 0;
|
||||
}
|
||||
|
||||
#if !HAVE_EXPLICIT_BZERO
|
||||
/*
|
||||
* The pointer to memset() is volatile so that compiler must de-reference the pointer and can't assume that
|
||||
* it points to any function in particular (such as memset(), which it then might further "optimize"). This
|
||||
* approach is inspired by openssl's crypto/mem_clr.c.
|
||||
*/
|
||||
typedef void *(*memset_t)(void *,int,size_t);
|
||||
|
||||
static volatile memset_t memset_func = memset;
|
||||
|
||||
void* explicit_bzero_safe(void *p, size_t l) {
|
||||
if (l > 0)
|
||||
memset_func(p, '\0', l);
|
||||
|
||||
return p;
|
||||
}
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user