]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
move to using memset_explicit()
authorAlan T. DeKok <aland@freeradius.org>
Mon, 31 Jul 2023 15:30:24 +0000 (11:30 -0400)
committerAlan T. DeKok <aland@freeradius.org>
Mon, 31 Jul 2023 15:35:24 +0000 (11:35 -0400)
src/include/missing-h
src/lib/util/misc.c
src/lib/util/misc.h
src/lib/util/missing.c
src/lib/util/pair.c
src/lib/util/value.c

index 0dd155ff1bd5eb1d987c3f4a9a044ce1ccb4634c..d356ecc559985cb943469f239bcb94297a126c47 100644 (file)
@@ -169,6 +169,10 @@ int sendmmsg(int sockfd, struct mmsghdr *msgvec, unsigned int vlen, int flags);
 void           closefrom(int fd);
 #endif
 
+#ifndef HAVE_MEMSET_EXPLICIT
+void *memset_explicit(void *ptr, int ch, size_t len);
+#endif
+
 #ifndef HAVE_SETLINEBUF
 #  ifdef HAVE_SETVBUF
 #    define setlinebuf(x) setvbuf(x, NULL, _IOLBF, 0)
index 1bb3bfd1205ba0cea2f9d8ac155c933cc9d5c642..48db1bd21fdc04c51df714a904c8f26d4aa82b3b 100644 (file)
@@ -469,25 +469,3 @@ int fr_digest_cmp(uint8_t const *a, uint8_t const *b, size_t length)
 
        return result;          /* 0 is OK, !0 is !OK, just like memcmp */
 }
-
-void fr_memset_secure(void *ptr, size_t len)
-{
-       if (!len) return;
-
-#if defined(HAVE_MEMSET_S)
-       (void) memset_s(ptr, len, 0, len);
-
-#elif defined(HAVE_EXPLICIT_BZERO)
-       explicit_bzero(ptr, len);
-
-#else
-       {
-               volatile unsigned char *volatile p =  (volatile unsigned char *volatile) ptr;
-               size_t i = len;
-
-               while (i--) {
-                       *(p++) = 0;
-               }
-       }
-#endif
-}
index 54aa328f364f44c1c61e4f79b867ee262eb4db73..ccafef1880c92bbe4083deed8fd7c71fdd8020b8 100644 (file)
@@ -171,8 +171,6 @@ int8_t              fr_pointer_cmp(void const *a, void const *b);
 void           fr_quick_sort(void const *to_sort[], int min_idx, int max_idx, fr_cmp_t cmp);
 int            fr_digest_cmp(uint8_t const *a, uint8_t const *b, size_t length) CC_HINT(nonnull);
 
-void           fr_memset_secure(void *ptr, size_t len);
-
 #ifdef __cplusplus
 }
 #endif
index 10c2aa7b44a823656bdc4115fdf425b84fb18265..9a74ab355e03a596d0f2b01f6d00420f4205a74d 100644 (file)
@@ -615,3 +615,25 @@ do_close:
        return;
 }
 #endif
+
+#ifndef HAVE_MEMSET_EXPLICIT
+void *memset_explicit(void *ptr, int ch, size_t len)
+{
+       if (!len) return ptr;
+
+#ifdef HAVE_EXPLICIT_BZERO
+       explicit_bzero(ptr, len);
+#else
+       {
+               volatile unsigned char *volatile p =  (volatile unsigned char *volatile) ptr;
+               size_t i = len;
+
+               while (i--) {
+                       *(p++) = ch;
+               }
+       }
+#endif
+
+       return ptr;
+}
+#endif
index 66f3f33fe4990f202e3accb42dd07463549c4558..bfc26ccbe2b7736bae3c6f953bef58e435386fbe 100644 (file)
@@ -89,11 +89,11 @@ static int _fr_pair_free(fr_pair_t *vp)
 
        case FR_TYPE_STRING:
        case FR_TYPE_OCTETS:
-               if (vp->data.secret) fr_memset_secure(vp->vp_ptr, vp->vp_length);
+               if (vp->data.secret) memset_explicit(vp->vp_ptr, 0, vp->vp_length);
                break;
 
        default:
-               if (vp->data.secret) fr_memset_secure(&vp->data, sizeof(vp->data));
+               if (vp->data.secret) memset_explicit(&vp->data, 0, sizeof(vp->data));
                break;
        }
 
index 1ba981b93f825b728f683f08f2828adc6601d011..6069b3e5ae44e5fede1ec5810ff371dd6dc8b3c1 100644 (file)
@@ -3525,7 +3525,7 @@ void fr_value_box_clear_value(fr_value_box_t *data)
        switch (data->type) {
        case FR_TYPE_OCTETS:
        case FR_TYPE_STRING:
-               if (data->secret) fr_memset_secure(data->datum.ptr, data->vb_length);
+               if (data->secret) memset_explicit(data->datum.ptr, 0, data->vb_length);
                talloc_free(data->datum.ptr);
                break;