1263635Sdes/* OPENBSD ORIGINAL: lib/libc/string/explicit_bzero.c */ 2263635Sdes/* $OpenBSD: explicit_bzero.c,v 1.1 2014/01/22 21:06:45 tedu Exp $ */ 3263635Sdes/* 4263635Sdes * Public domain. 5263635Sdes * Written by Ted Unangst 6263635Sdes */ 7263635Sdes 8263635Sdes#include "includes.h" 9263635Sdes 10295367Sdes/* 11295367Sdes * explicit_bzero - don't let the compiler optimize away bzero 12295367Sdes */ 13295367Sdes 14263635Sdes#ifndef HAVE_EXPLICIT_BZERO 15263635Sdes 16295367Sdes#ifdef HAVE_MEMSET_S 17295367Sdes 18295367Sdesvoid 19295367Sdesexplicit_bzero(void *p, size_t n) 20295367Sdes{ 21295367Sdes (void)memset_s(p, n, 0, n); 22295367Sdes} 23295367Sdes 24295367Sdes#else /* HAVE_MEMSET_S */ 25295367Sdes 26263635Sdes/* 27295367Sdes * Indirect bzero through a volatile pointer to hopefully avoid 28295367Sdes * dead-store optimisation eliminating the call. 29263635Sdes */ 30295367Sdesstatic void (* volatile ssh_bzero)(void *, size_t) = bzero; 31295367Sdes 32263635Sdesvoid 33263635Sdesexplicit_bzero(void *p, size_t n) 34263635Sdes{ 35295367Sdes ssh_bzero(p, n); 36263635Sdes} 37295367Sdes 38295367Sdes#endif /* HAVE_MEMSET_S */ 39295367Sdes 40295367Sdes#endif /* HAVE_EXPLICIT_BZERO */ 41