1*7c8b181aSJerome Forissier // SPDX-License-Identifier: BSD-2-Clause 2*7c8b181aSJerome Forissier /* 3*7c8b181aSJerome Forissier * Copyright (C) 2019 Linaro Limited 4*7c8b181aSJerome Forissier */ 5*7c8b181aSJerome Forissier 6*7c8b181aSJerome Forissier #include <string.h> 7*7c8b181aSJerome Forissier #include <string_ext.h> 8*7c8b181aSJerome Forissier 9*7c8b181aSJerome Forissier /* 10*7c8b181aSJerome Forissier * This method prevents dead store elimination, which could happen in case 11*7c8b181aSJerome Forissier * link-time optimization (LTO) is used. 12*7c8b181aSJerome Forissier * See "Dead Store Elimination (Still) Considered Harmful" [1] section 3.3.3. 13*7c8b181aSJerome Forissier * 14*7c8b181aSJerome Forissier * [1] 15*7c8b181aSJerome Forissier * http://www.usenix.org/system/files/conference/usenixsecurity17/sec17-yang.pdf 16*7c8b181aSJerome Forissier */ 17*7c8b181aSJerome Forissier static volatile void * (*memset_func)(void *, int, size_t) = 18*7c8b181aSJerome Forissier (volatile void * (*)(void *, int, size_t))&memset; 19*7c8b181aSJerome Forissier memzero_explicit(void * s,size_t count)20*7c8b181aSJerome Forissiervoid memzero_explicit(void *s, size_t count) 21*7c8b181aSJerome Forissier { 22*7c8b181aSJerome Forissier memset_func(s, 0, count); 23*7c8b181aSJerome Forissier } 24