]> Savannah Git Hosting - gnulib.git/commitdiff
explicit_bzero: implement via memset_explicit
authorPaul Eggert <eggert@cs.ucla.edu>
Mon, 28 Nov 2022 04:52:05 +0000 (20:52 -0800)
committerPaul Eggert <eggert@cs.ucla.edu>
Tue, 29 Nov 2022 06:03:58 +0000 (22:03 -0800)
* lib/explicit_bzero.c (explicit_bzero):
Simplify by just calling memset_explicit.
* m4/explicit_bzero.m4 (gl_PREREQ_EXPLICIT_BZERO): Remove.
All uses removed.
* modules/explicit_bzero (Depends-on): Add memset_explicit.

ChangeLog
lib/explicit_bzero.c
m4/explicit_bzero.m4
modules/explicit_bzero

index ea76fef39981d366284608e3a006c1b73b75f7c2..3533842068e0ae37571dd18ddb71269d4f36e580 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,12 @@
 2022-11-27  Paul Eggert  <eggert@cs.ucla.edu>
 
+       explicit_bzero: implement via memset_explicit
+       * lib/explicit_bzero.c (explicit_bzero):
+       Simplify by just calling memset_explicit.
+       * m4/explicit_bzero.m4 (gl_PREREQ_EXPLICIT_BZERO): Remove.
+       All uses removed.
+       * modules/explicit_bzero (Depends-on): Add memset_explicit.
+
        explicit_bzero: memset_explicit is standard
        * doc/glibc-functions/explicit_bzero.texi:
        Say that memset_explicit is preferred in new code.
index 584f98292434571b901413bf097c2dab3b11d23d..fc309f81d61c6d42b12afa726638f3a0edb71578 100644 (file)
@@ -1,74 +1,27 @@
 /* Erasure of sensitive data, generic implementation.
    Copyright (C) 2016-2022 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
 
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
+   This file is free software: you can redistribute it and/or modify
+   it under the terms of the GNU Lesser General Public License as
+   published by the Free Software Foundation; either version 2.1 of the
+   License, or (at your option) any later version.
 
-   The GNU C Library is distributed in the hope that it will be useful,
+   This file is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU Lesser General Public License for more details.
 
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <https://www.gnu.org/licenses/>.  */
+   You should have received a copy of the GNU Lesser General Public License
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
 
-/* An assembler implementation of explicit_bzero can be created as an
-   assembler alias of an optimized bzero implementation.
-   Architecture-specific implementations also need to define
-   __explicit_bzero_chk.  */
-
-#if !_LIBC
-# include <config.h>
-#endif
-
-/* memset_s need this define */
-#if HAVE_MEMSET_S
-# define __STDC_WANT_LIB_EXT1__ 1
-#endif
+#include <config.h>
 
 #include <string.h>
 
-#if defined _WIN32 && !defined __CYGWIN__
-# define  WIN32_LEAN_AND_MEAN
-# include <windows.h>
-#endif
-
-#if _LIBC
-/* glibc-internal users use __explicit_bzero_chk, and explicit_bzero
-   redirects to that.  */
-# undef explicit_bzero
-#endif
-
 /* Set LEN bytes of S to 0.  The compiler will not delete a call to
    this function, even if S is dead after the call.  */
 void
 explicit_bzero (void *s, size_t len)
 {
-#if defined _WIN32 && !defined __CYGWIN__
-  (void) SecureZeroMemory (s, len);
-#elif HAVE_EXPLICIT_MEMSET
-  explicit_memset (s, '\0', len);
-#elif HAVE_MEMSET_S
-  (void) memset_s (s, len, '\0', len);
-#elif defined __GNUC__ && !defined __clang__
-  memset (s, '\0', len);
-  /* Compiler barrier.  */
-  __asm__ volatile ("" ::: "memory");
-#elif defined __clang__
-  memset (s, '\0', len);
-  /* Compiler barrier.  */
-  /* With asm ("" ::: "memory") LLVM analyzes uses of 's' and finds that the
-     whole thing is dead and eliminates it.  Use 'g' to work around this
-     problem.  See <https://bugs.llvm.org/show_bug.cgi?id=15495#c11>.  */
-  __asm__ volatile ("" : : "g"(s) : "memory");
-#else
-  /* Invoke memset through a volatile function pointer.  This defeats compiler
-     optimizations.  */
-  void * (* const volatile volatile_memset) (void *, int, size_t) = memset;
-  (void) volatile_memset (s, '\0', len);
-#endif
+  memset_explicit (s, 0, len);
 }
index 3b4ef8c3cc5156e24b9c64cfe0e0ce9ada6c1ac8..6c0d4c233680c45786f74ee48089f449b50435d4 100644 (file)
@@ -15,9 +15,3 @@ AC_DEFUN([gl_FUNC_EXPLICIT_BZERO],
     HAVE_EXPLICIT_BZERO=0
   fi
 ])
-
-AC_DEFUN([gl_PREREQ_EXPLICIT_BZERO],
-[
-  AC_CHECK_FUNCS([explicit_memset])
-  AC_CHECK_FUNCS_ONCE([memset_s])
-])
index bb5f8a531097d4e656fdfd112405353afbc7b07c..8ba9a06ada173acc0de9b954cfc5aab131bafa0d 100644 (file)
@@ -7,14 +7,12 @@ m4/explicit_bzero.m4
 
 Depends-on:
 extensions
+memset_explicit
 string
 
 configure.ac:
 gl_FUNC_EXPLICIT_BZERO
 gl_CONDITIONAL([GL_COND_OBJ_EXPLICIT_BZERO], [test $HAVE_EXPLICIT_BZERO = 0])
-AM_COND_IF([GL_COND_OBJ_EXPLICIT_BZERO], [
-  gl_PREREQ_EXPLICIT_BZERO
-])
 gl_STRING_MODULE_INDICATOR([explicit_bzero])
 
 Makefile.am: