mirror of
https://github.com/curl/curl.git
synced 2026-05-16 23:16:25 +03:00
To safely zero memory, introduce `curlx_memzero()`, and map it to `memset_s()` (C11) or `memset_explicit()` (C23) if auto-detected, or `explicit_bzero()` or `explicit_memset()` for platforms opted-in, or fall back to a local workaround if all unavailable. On Windows, always use `SecureZeroMemory()`, or `SecureZeroMemory2()` with Visual Studio and Windows SDK 10.0.26100.0+. Details above are experimental and may change if they cause issues. Also add macros/functions that zero memory before freeing a buffer: - `curlx_safefreezero()`: for buffers with size. - `curlx_safefreezeroz()`: for null-terminated buffers. - `curlx_freezero()`: for buffers with size. - `curlx_freezeroz()`: for null-terminated buffers. `curlx_memzero()` must not be passed a NULL pointer because in some implementations it is undefined behavior. Also: - curl_sha512_256: Replace hard-wired `explicit_memset()` call with new `curlx_memzero()`. Refs: https://en.cppreference.com/c/string/byte/memset https://man7.org/linux/man-pages/man3/explicit_bzero.3.html https://man.freebsd.org/cgi/man.cgi?query=explicit_bzero https://man.netbsd.org/NetBSD-7.2/explicit_memset.3 https://learn.microsoft.com/previous-versions/windows/desktop/legacy/aa366877(v=vs.85) https://learn.microsoft.com/windows/win32/memory/winbase-securezeromemory2 https://learn.microsoft.com/cpp/overview/compiler-versions https://learn.microsoft.com/windows/apps/windows-sdk/downloads https://jtsoya539.github.io/windows-sdk-versions/ Credits-to: Daniel Gustafsson Credits-to: Will Cosgrove and co-authors in libssh2 Ref: #13589 (original attempt) Ref: #21588 Closes #21598 |
||
|---|---|---|
| .. | ||
| base64.c | ||
| base64.h | ||
| basename.c | ||
| basename.h | ||
| dynbuf.c | ||
| dynbuf.h | ||
| fopen.c | ||
| fopen.h | ||
| inet_ntop.c | ||
| inet_ntop.h | ||
| inet_pton.c | ||
| inet_pton.h | ||
| multibyte.c | ||
| multibyte.h | ||
| nonblock.c | ||
| nonblock.h | ||
| snprintf.c | ||
| snprintf.h | ||
| strcopy.c | ||
| strcopy.h | ||
| strdup.c | ||
| strdup.h | ||
| strerr.c | ||
| strerr.h | ||
| strparse.c | ||
| strparse.h | ||
| timediff.c | ||
| timediff.h | ||
| timeval.c | ||
| timeval.h | ||
| version_win32.c | ||
| version_win32.h | ||
| wait.c | ||
| wait.h | ||
| warnless.c | ||
| warnless.h | ||
| winapi.c | ||
| winapi.h | ||