use-bzero-instead-of-memset_s.diff

Subject: use bzero() instead of memset_s()

lib/replace/replace.h header defines ZERO_STRUCT macro
which uses memset_s() function (which is similar to
memset() but can not be optimized out by the compiler).
Glibc has bzero() with similar property, while memset_s()
have is implemented in lib/replace/replace.c, - this way,
some binaries needlessly link with libreplace-samba4 just
to get rep_memset_s() symbol. By using bzero() instead,
this endless linkage is eliminated, so we can package,
for example, libldb (which uses ZERO_STRUCT) without it
linking to libreplace-samba4.

Note: actually using explicit_bzero() so it is not optimized
out by the compiler - this is the original goal of using
memset_s().
This commit is contained in:
su-fang 2023-03-29 14:07:40 +08:00
parent 65ca6a9cff
commit 6396f3cc23
1 changed files with 1 additions and 1 deletions

View File

@ -819,7 +819,7 @@ typedef unsigned long long ptrdiff_t ;
/**
* Zero a structure.
*/
#define ZERO_STRUCT(x) memset_s((char *)&(x), sizeof(x), 0, sizeof(x))
#define ZERO_STRUCT(x) explicit_bzero((char *)&(x), sizeof(x))
/**
* Zero a structure given a pointer to the structure.