]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
Replace memset_s() with memset_explicit()
authorAndreas Schneider <asn@samba.org>
Thu, 16 Oct 2025 09:19:51 +0000 (11:19 +0200)
committerAndreas Schneider <asn@cryptomilk.org>
Tue, 11 Nov 2025 13:46:42 +0000 (13:46 +0000)
Signed-off-by: Andreas Schneider <asn@samba.org>
Reviewed-by: Douglas Bagnall <douglas.bagnall@catalyst.net.nz>
lib/replace/replace.h
lib/talloc/talloc.c
lib/util/memory.h
lib/util/tests/test_talloc_keep_secret.c

index 21e6d2d960d4ca6fac732e50a368abf084acd459..f6716d8b0eb4d65727d6a7a5091a6c9f915a0076 100644 (file)
@@ -811,50 +811,50 @@ 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) memset_explicit((char *)&(x), 0, sizeof(x))
 
 /**
  * Zero a structure given a pointer to the structure.
  */
 #define ZERO_STRUCTP(x) do { \
        if ((x) != NULL) { \
-               memset_s((char *)(x), sizeof(*(x)), 0, sizeof(*(x))); \
+               memset_explicit((char *)(x), 0, sizeof(*(x))); \
        } \
 } while(0)
 
 /**
  * Zero a structure given a pointer to the structure - no zero check
  */
-#define ZERO_STRUCTPN(x) memset_s((char *)(x), sizeof(*(x)), 0, sizeof(*(x)))
+#define ZERO_STRUCTPN(x) memset_explicit((char *)(x), 0, sizeof(*(x)))
 
 /**
  * Zero an array - note that sizeof(array) must work - ie. it must not be a
  * pointer
  */
-#define ZERO_ARRAY(x) memset_s((char *)(x), sizeof(x), 0, sizeof(x))
+#define ZERO_ARRAY(x) memset_explicit((char *)(x), 0, sizeof(x))
 
 /**
  * Zero a given len of an array
  */
-#define ZERO_ARRAY_LEN(x, l) memset_s((char *)(x), (l), 0, (l))
+#define ZERO_ARRAY_LEN(x, l) memset_explicit((char *)(x), 0, (l))
 
 /**
  * Explicitly zero data from memory. This is guaranteed to be not optimized
  * away.
  */
-#define BURN_DATA(x) memset_s((char *)&(x), sizeof(x), 0, sizeof(x))
+#define BURN_DATA(x) memset_explicit((char *)&(x), 0, sizeof(x))
 
 /**
  * Explicitly zero data from memory. This is guaranteed to be not optimized
  * away.
  */
-#define BURN_DATA_SIZE(x, s) memset_s((char *)&(x), (s), 0, (s))
+#define BURN_DATA_SIZE(x, s) memset_explicit((char *)&(x), 0, (s))
 
 /**
  * Explicitly zero data from memory. This is guaranteed to be not optimized
  * away.
  */
-#define BURN_PTR_SIZE(x, s) memset_s((x), (s), 0, (s))
+#define BURN_PTR_SIZE(x, s) memset_explicit((x), 0, (s))
 
 /**
  * Explicitly zero data in string. This is guaranteed to be not optimized
@@ -863,7 +863,7 @@ typedef unsigned long long ptrdiff_t ;
 #define BURN_STR(x)    do { \
                                if ((x) != NULL) { \
                                        size_t s = strlen(x); \
-                                       memset_s((x), s, 0, s); \
+                                       memset_explicit((x), 0, s); \
                                } \
                        } while(0)
 
index ac3d26fcb52d7cbbfd860ce2bac0717549cfde47..2f13a2c64a9fe4f30195272d63fafc6941d842ed 100644 (file)
@@ -2837,7 +2837,7 @@ _PUBLIC_ void *_talloc_realloc_array_zero(const void *ctx,
 
        if (newsize > existing) {
                size_t to_zero = newsize - existing;
-               memset_s(((char *)newptr) + existing, to_zero, 0, to_zero);
+               memset_explicit(((char *)newptr) + existing, 0, to_zero);
        }
 
        return newptr;
index 40c66d824a1cf60e4c65981d4c8ce500c44feb61..ff51a6ebe49a8cb0069323f59900dfcd78f27f97 100644 (file)
@@ -40,7 +40,7 @@
 #define BURN_FREE_STR(x) do { \
                                if ((x) != NULL) { \
                                        size_t s = strlen(x); \
-                                       memset_s((x), s, 0, s); \
+                                       memset_explicit((x), 0, s); \
                                        free(x); (x) = NULL; \
                                } \
                        } while(0)
@@ -53,7 +53,7 @@
  **/
 #define BURN_FREE(x, s) do { \
                                if ((x) != NULL) { \
-                                       memset_s((x), (s), 0, (s)); \
+                                       memset_explicit((x), 0, (s)); \
                                        free(x); (x) = NULL; \
                                } \
                        } while(0)
@@ -78,7 +78,7 @@
  * Zero a structure.
  */
 #ifndef ZERO_STRUCT
-#define ZERO_STRUCT(x) memset_s((char *)&(x), sizeof(x), 0, sizeof(x))
+#define ZERO_STRUCT(x) memset_explicit((char *)&(x), 0, sizeof(x))
 #endif
 
 /**
@@ -87,7 +87,7 @@
 #ifndef ZERO_STRUCTP
 #define ZERO_STRUCTP(x) do { \
        if ((x) != NULL) { \
-               memset_s((char *)(x), sizeof(*(x)), 0, sizeof(*(x))); \
+               memset_explicit((char *)(x), 0, sizeof(*(x))); \
        } \
 } while(0)
 #endif
@@ -96,7 +96,7 @@
  * Zero a structure given a pointer to the structure - no zero check.
  */
 #ifndef ZERO_STRUCTPN
-#define ZERO_STRUCTPN(x) memset_s((char *)(x), sizeof(*(x)), 0, sizeof(*(x)))
+#define ZERO_STRUCTPN(x) memset_explicit((char *)(x), 0, sizeof(*(x)))
 #endif
 
 /**
  * pointer.
  */
 #ifndef ZERO_ARRAY
-#define ZERO_ARRAY(x) memset_s((char *)(x), sizeof(x), 0, sizeof(x))
+#define ZERO_ARRAY(x) memset_explicit((char *)(x), 0, sizeof(x))
 #endif
 
 /**
  * Zero a given len of an array
  */
-#define ZERO_ARRAY_LEN(x, l) memset_s((char *)(x), (l), 0, (l))
+#ifndef ZERO_ARRAY_LEN
+#define ZERO_ARRAY_LEN(x, l) memset_explicit((char *)(x), 0, (l))
+#endif
 
 /**
  * Work out how many elements there are in a static array
index 1462dabe9567634d26bf50b2bd8a25a11a6a5cb2..66c3f7f3e7a1db267405ec31efb1b55cfe607309 100644 (file)
@@ -8,12 +8,11 @@
 #include <talloc.h>
 #include "lib/util/talloc_keep_secret.h"
 
-int rep_memset_s(void *dest, size_t destsz, int ch, size_t count);
+int rep_memset_explicit(void *dest, int ch, size_t count);
 
-int rep_memset_s(void *dest, size_t destsz, int ch, size_t count)
+int rep_memset_explicit(void *dest, int ch, size_t count)
 {
        check_expected_ptr(dest);
-       check_expected(destsz);
        check_expected(ch);
        check_expected(count);
 
@@ -44,10 +43,9 @@ static void test_talloc_keep_secret(void ** state)
        ptr1_size = talloc_get_size(ptr1);
        assert_int_equal(ptr1_size, strlen(ptr1) + 1);
 
-       expect_string(rep_memset_s, dest, "secret");
-       expect_value(rep_memset_s, destsz, strlen(ptr1) + 1);
-       expect_value(rep_memset_s, ch, (int)'\0');
-       expect_value(rep_memset_s, count, strlen(ptr1) + 1);
+       expect_string(rep_memset_explicit, dest, "secret");
+       expect_value(rep_memset_explicit, ch, (int)'\0');
+       expect_value(rep_memset_explicit, count, strlen(ptr1) + 1);
 
        talloc_free(ptr1);
 
@@ -73,10 +71,9 @@ static void test_talloc_keep_secret_validate_memset(void **state)
        assert_non_null(password);
        talloc_keep_secret(password);
 
-       expect_string(rep_memset_s, dest, "secret");
-       expect_value(rep_memset_s, destsz, strlen(password) + 1);
-       expect_value(rep_memset_s, ch, (int)'\0');
-       expect_value(rep_memset_s, count, strlen(password) + 1);
+       expect_string(rep_memset_explicit, dest, "secret");
+       expect_value(rep_memset_explicit, ch, (int)'\0');
+       expect_value(rep_memset_explicit, count, strlen(password) + 1);
 
        talloc_free(mem_ctx);
 }