Line data Source code
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 3012733 : void libspdm_zero_mem(void *buffer, size_t length)
17 : {
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 : volatile uint8_t *pointer;
27 :
28 3012733 : pointer = (uint8_t *)buffer;
29 >13763*10^7 : while (length-- != 0) {
30 >13763*10^7 : *(pointer++) = 0;
31 : }
32 :
33 : #if defined(_MSC_VER) && (_MSC_VER > 1200) && !defined(__clang__)
34 : _ReadWriteBarrier();
35 : #elif defined(__GNUC__)
36 3012733 : __asm__ __volatile__ ("" : : : "memory");
37 : #endif
38 :
39 : #endif
40 3012733 : }
|