EXPLICIT_MEMSET(3)

EXPLICIT_MEMSET(3) | Library Functions Manual | EXPLICIT_MEMSET(3)

# NAME

`explicit_memset` —
guarantee writing a byte to a byte string

# LIBRARY

Standard C Library (libc, -lc)

# SYNOPSIS

`#include <string.h>`

void *
`explicit_memset`(void *b, int c, size_t len);

# DESCRIPTION

The `explicit_memset`() function writes len bytes of value c (converted to an unsigned char) to the string b. It is guaranteed not to be optimized away by the compiler even if b is no longer used and is about to be freed or go out of scope.

# RETURN VALUES

The `explicit_memset`() function returns the original value of b.

# EXAMPLES

Create a buffer on the stack for a secret key, use it, and then zero it in memory before throwing it away.

    void
    f(void)
    {
    	uint8_t key[32];

    	crypto_random(key, sizeof(key));
    	do_crypto_stuff(key, sizeof(key));
    	...

    	explicit_memset(key, 0, sizeof(key));
    }

# SEE ALSO

consttime_memequal(3), memset(3)

# HISTORY

The `explicit_memset`() function appeared in NetBSD 7.0.

August 28, 2013 | NetBSD 9.3