We will no longer be able to call into the kernel image once we merge the decompressor with the EFI stub, so we need our own implementation of memcmp(). Let's add the one from lib/string.c and simplify it. Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
48 lines
1.1 KiB
C
48 lines
1.1 KiB
C
// SPDX-License-Identifier: GPL-2.0
|
|
|
|
#include <linux/efi.h>
|
|
#include <asm/efi.h>
|
|
#include <asm/string.h>
|
|
|
|
#include "efistub.h"
|
|
|
|
#ifdef CONFIG_KASAN
|
|
#undef memcpy
|
|
#undef memmove
|
|
#undef memset
|
|
void *__memcpy(void *__dest, const void *__src, size_t __n) __alias(memcpy);
|
|
void *__memmove(void *__dest, const void *__src, size_t count) __alias(memmove);
|
|
void *__memset(void *s, int c, size_t count) __alias(memset);
|
|
#endif
|
|
|
|
void *memcpy(void *dst, const void *src, size_t len)
|
|
{
|
|
efi_bs_call(copy_mem, dst, src, len);
|
|
return dst;
|
|
}
|
|
|
|
extern void *memmove(void *dst, const void *src, size_t len) __alias(memcpy);
|
|
|
|
void *memset(void *dst, int c, size_t len)
|
|
{
|
|
efi_bs_call(set_mem, dst, len, c & U8_MAX);
|
|
return dst;
|
|
}
|
|
|
|
/**
|
|
* memcmp - Compare two areas of memory
|
|
* @cs: One area of memory
|
|
* @ct: Another area of memory
|
|
* @count: The size of the area.
|
|
*/
|
|
#undef memcmp
|
|
int memcmp(const void *cs, const void *ct, size_t count)
|
|
{
|
|
const unsigned char *su1, *su2;
|
|
int res = 0;
|
|
|
|
for (su1 = cs, su2 = ct; 0 < count; ++su1, ++su2, count--)
|
|
if ((res = *su1 - *su2) != 0)
|
|
break;
|
|
return res;
|
|
}
|