/src/libspdm/os_stub/memlib/zero_mem.c
Line | Count | Source |
1 | | /** |
2 | | * Copyright Notice: |
3 | | * Copyright 2021-2022 DMTF. All rights reserved. |
4 | | * License: BSD 3-Clause License. For full text see link: https://github.com/DMTF/libspdm/blob/main/LICENSE.md |
5 | | **/ |
6 | | |
7 | | #include "hal/library/memlib.h" |
8 | | |
9 | | #ifdef _WIN32 |
10 | | #include <windows.h> |
11 | | #elif defined(_GNU_SOURCE) || defined(_BSD_SOURCE) |
12 | | #include <strings.h> |
13 | | #include <string.h> |
14 | | #endif |
15 | | |
16 | | void libspdm_zero_mem(void *buffer, size_t length) |
17 | 74.6M | { |
18 | | |
19 | | #if defined(__STDC_LIB_EXT1__) |
20 | | memset_s(buffer, length, 0, length); |
21 | | #elif defined(_WIN32) |
22 | | SecureZeroMemory(buffer, length); |
23 | | #elif defined(_GNU_SOURCE) || defined(_BSD_SOURCE) |
24 | | explicit_bzero(buffer, length); |
25 | | #else |
26 | 74.6M | volatile uint8_t *pointer; |
27 | | |
28 | 74.6M | pointer = (uint8_t *)buffer; |
29 | 4.92G | while (length-- != 0) { |
30 | 4.85G | *(pointer++) = 0; |
31 | 4.85G | } |
32 | | |
33 | | #if defined(_MSC_VER) && (_MSC_VER > 1200) && !defined(__clang__) |
34 | | _ReadWriteBarrier(); |
35 | | #elif defined(__GNUC__) |
36 | | __asm__ __volatile__ ("" : : : "memory"); |
37 | 74.6M | #endif |
38 | | |
39 | 74.6M | #endif |
40 | 74.6M | } |