1/* 2 * Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved. 3 * Copyright (c) 2020-2022 Huawei Device Co., Ltd. All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without modification, 6 * are permitted provided that the following conditions are met: 7 * 8 * 1. Redistributions of source code must retain the above copyright notice, this list of 9 * conditions and the following disclaimer. 10 * 11 * 2. Redistributions in binary form must reproduce the above copyright notice, this list 12 * of conditions and the following disclaimer in the documentation and/or other materials 13 * provided with the distribution. 14 * 15 * 3. Neither the name of the copyright holder nor the names of its contributors may be used 16 * to endorse or promote products derived from this software without specific prior written 17 * permission. 18 * 19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 20 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 21 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 22 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 23 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 24 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 25 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 26 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 27 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 28 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 29 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 */ 31 32#include "string.h" 33#include "los_lms_pri.h" 34 35#undef memset 36void *memset(void *addr, int c, size_t len) 37{ 38 __asan_storeN_noabort((UINTPTR)addr, len); 39 return __memset(addr, c, len); 40} 41 42#undef memmove 43void *memmove(void *dest, const void *src, size_t len) 44{ 45 __asan_loadN_noabort((UINTPTR)src, len); 46 __asan_storeN_noabort((UINTPTR)dest, len); 47 return __memmove(dest, src, len); 48} 49 50#undef memcpy 51void *memcpy(void *dest, const void *src, size_t len) 52{ 53 __asan_loadN_noabort((UINTPTR)src, len); 54 __asan_storeN_noabort((UINTPTR)dest, len); 55 return __memcpy(dest, src, len); 56} 57 58#undef strcat 59char *strcat(char *s, const char *append) 60{ 61 if ((s == NULL) || (append == NULL)) { 62 return NULL; 63 } 64 65 CHAR *end = s; 66 size_t len = strlen(append); 67 for (; *end != '\0'; ++end) { 68 } 69 70 __asan_storeN_noabort((UINTPTR)end, len + 1); 71 __asan_loadN_noabort((UINTPTR)append, len + 1); 72 73 return __strcat(s, append); 74} 75 76#undef strcpy 77char *strcpy(char *dest, const char *src) 78{ 79 if ((dest == NULL) || (src == NULL)) { 80 return NULL; 81 } 82 83 size_t len = strlen(src); 84 __asan_storeN_noabort((UINTPTR)dest, len + 1); 85 __asan_loadN_noabort((UINTPTR)src, len + 1); 86 87 return __strcpy(dest, src); 88} 89 90#undef strncat 91char *strncat(char *dest, const char *src, size_t n) 92{ 93 if ((dest == NULL) || (src == NULL)) { 94 return NULL; 95 } 96 97 CHAR *end = dest; 98 size_t len = strlen(src); 99 size_t size = len > n ? n : len; 100 for (; *end != '\0'; ++end) { 101 } 102 103 __asan_storeN_noabort((UINTPTR)end, size + 1); 104 __asan_loadN_noabort((UINTPTR)src, size + 1); 105 106 return __strncat(dest, src, n); 107} 108 109#undef strncpy 110char *strncpy(char *dest, const char *src, size_t n) 111{ 112 if ((dest == NULL) || (src == NULL)) { 113 return NULL; 114 } 115 116 size_t len = strlen(src); 117 size_t size = len > n ? n : len; 118 119 __asan_storeN_noabort((UINTPTR)dest, n); 120 __asan_loadN_noabort((UINTPTR)src, size + 1); 121 return __strncpy(dest, src, n); 122} 123