From: Andreas Schneider Date: Thu, 3 Jan 2019 16:19:32 +0000 (+0100) Subject: Avoid allocating a register in zap() assembly X-Git-Tag: krb5-1.18-beta1~199 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7391e8b541061d0f584193b4a53365b64364b0e8;p=thirdparty%2Fkrb5.git Avoid allocating a register in zap() assembly See https://bugs.llvm.org/show_bug.cgi?id=15495 Also add explicit_bzero() (glibc, FreeBSD) and explicit_memset() (NetBSD) as alternatives. [ghudson@mit.edu: added explicit_bzero() and explicit_memset()] --- diff --git a/src/configure.in b/src/configure.in index 61ef738dc4..54cf107f84 100644 --- a/src/configure.in +++ b/src/configure.in @@ -421,7 +421,7 @@ AC_PROG_LEX AC_C_CONST AC_HEADER_DIRENT AC_FUNC_STRERROR_R -AC_CHECK_FUNCS(strdup setvbuf seteuid setresuid setreuid setegid setresgid setregid setsid flock fchmod chmod strptime geteuid setenv unsetenv getenv gmtime_r localtime_r bswap16 bswap64 mkstemp getusershell access getcwd srand48 srand srandom stat strchr strerror timegm) +AC_CHECK_FUNCS(strdup setvbuf seteuid setresuid setreuid setegid setresgid setregid setsid flock fchmod chmod strptime geteuid setenv unsetenv getenv gmtime_r localtime_r bswap16 bswap64 mkstemp getusershell access getcwd srand48 srand srandom stat strchr strerror timegm explicit_bzero explicit_memset) AC_CHECK_FUNC(mkstemp, [MKSTEMP_ST_OBJ= diff --git a/src/include/k5-platform.h b/src/include/k5-platform.h index 997b655e1e..1fcd68e8c0 100644 --- a/src/include/k5-platform.h +++ b/src/include/k5-platform.h @@ -1023,6 +1023,10 @@ static inline void zap(void *ptr, size_t len) if (len > 0) memset_s(ptr, len, 0, len); } +#elif defined(HAVE_EXPLICIT_BZERO) +# define zap(ptr, len) explicit_bzero(ptr, len) +#elif defined(HAVE_EXPLICIT_MEMSET) +# define zap(ptr, len) explicit_memset(ptr, 0, len) #elif defined(__GNUC__) || defined(__clang__) /* * Use an asm statement which declares a memory clobber to force the memset to @@ -1032,7 +1036,7 @@ static inline void zap(void *ptr, size_t len) { if (len > 0) memset(ptr, 0, len); - __asm__ __volatile__("" : : "r" (ptr) : "memory"); + __asm__ __volatile__("" : : "g" (ptr) : "memory"); } #else /*