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)
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
-}
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
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
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;
}
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;