Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v6.17 74 lines 1.6 kB view raw
1// SPDX-License-Identifier: GPL-2.0 2 3#include <linux/efi.h> 4#include <asm/efi.h> 5#include <asm/string.h> 6 7#include "efistub.h" 8 9#ifdef CONFIG_KASAN 10#undef memcpy 11#undef memmove 12#undef memset 13void *__memcpy(void *__dest, const void *__src, size_t __n) __alias(memcpy); 14void *__memmove(void *__dest, const void *__src, size_t count) __alias(memmove); 15void *__memset(void *s, int c, size_t count) __alias(memset); 16#endif 17 18static void *efistub_memmove(u8 *dst, const u8 *src, size_t len) 19{ 20 if (src > dst || dst >= (src + len)) 21 for (size_t i = 0; i < len; i++) 22 dst[i] = src[i]; 23 else 24 for (ssize_t i = len - 1; i >= 0; i--) 25 dst[i] = src[i]; 26 27 return dst; 28} 29 30static void *efistub_memset(void *dst, int c, size_t len) 31{ 32 for (u8 *d = dst; len--; d++) 33 *d = c; 34 35 return dst; 36} 37 38void *memcpy(void *dst, const void *src, size_t len) 39{ 40 if (efi_table_attr(efi_system_table, boottime) == NULL) 41 return efistub_memmove(dst, src, len); 42 43 efi_bs_call(copy_mem, dst, src, len); 44 return dst; 45} 46 47extern void *memmove(void *dst, const void *src, size_t len) __alias(memcpy); 48 49void *memset(void *dst, int c, size_t len) 50{ 51 if (efi_table_attr(efi_system_table, boottime) == NULL) 52 return efistub_memset(dst, c, len); 53 54 efi_bs_call(set_mem, dst, len, c & U8_MAX); 55 return dst; 56} 57 58/** 59 * memcmp - Compare two areas of memory 60 * @cs: One area of memory 61 * @ct: Another area of memory 62 * @count: The size of the area. 63 */ 64#undef memcmp 65int memcmp(const void *cs, const void *ct, size_t count) 66{ 67 const unsigned char *su1, *su2; 68 int res = 0; 69 70 for (su1 = cs, su2 = ct; 0 < count; ++su1, ++su2, count--) 71 if ((res = *su1 - *su2) != 0) 72 break; 73 return res; 74}