diff --git a/lib/internal.h b/lib/internal.h index 498b912..60d9643 100644 --- a/lib/internal.h +++ b/lib/internal.h @@ -236,6 +236,18 @@ typedef enum _yc_log_level_t { void yc_log_event(uint32_t id, yc_log_level_t level, const char *sz_format, ...); +#ifdef _WIN32 +#include +#define yc_memzero SecureZeroMemory +#elif __OPENBSD__ +#include +#define yc_memzero explicit_bzero; +#else +#define __STDC_WANT_LIB_EXT1__ 1 +#include +#define yc_memzero(_p, _n) (void)memset_s(_p, (rsize_t)_n, 0, (rsize_t)_n) +#endif + #ifdef __cplusplus } #endif diff --git a/lib/util.c b/lib/util.c index a978d01..cc6da6f 100644 --- a/lib/util.c +++ b/lib/util.c @@ -1146,7 +1146,7 @@ ykpiv_rc ykpiv_util_get_protected_mgm(ykpiv_state *state, ykpiv_mgm *mgm) { Cleanup: - memset(data, 0, sizeof(data)); + yc_memzero(data, sizeof(data)); _ykpiv_end_transaction(state); return res;