mirror of
https://github.com/torvalds/linux.git
synced 2024-11-10 22:21:40 +00:00
x86/lib: Change .weak to SYM_FUNC_START_WEAK for arch/x86/lib/mem*_64.S
Commit393f203f5f
("x86_64: kasan: add interceptors for memset/memmove/memcpy functions") added .weak directives to arch/x86/lib/mem*_64.S instead of changing the existing ENTRY macros to WEAK. This can lead to the assembly snippet .weak memcpy ... .globl memcpy which will produce a STB_WEAK memcpy with GNU as but STB_GLOBAL memcpy with LLVM's integrated assembler before LLVM 12. LLVM 12 (since https://reviews.llvm.org/D90108) will error on such an overridden symbol binding. Commitef1e03152c
("x86/asm: Make some functions local") changed ENTRY in arch/x86/lib/memcpy_64.S to SYM_FUNC_START_LOCAL, which was ineffective due to the preceding .weak directive. Use the appropriate SYM_FUNC_START_WEAK instead. Fixes:393f203f5f
("x86_64: kasan: add interceptors for memset/memmove/memcpy functions") Fixes:ef1e03152c
("x86/asm: Make some functions local") Reported-by: Sami Tolvanen <samitolvanen@google.com> Signed-off-by: Fangrui Song <maskray@google.com> Signed-off-by: Borislav Petkov <bp@suse.de> Reviewed-by: Nick Desaulniers <ndesaulniers@google.com> Tested-by: Nathan Chancellor <natechancellor@gmail.com> Tested-by: Nick Desaulniers <ndesaulniers@google.com> Cc: <stable@vger.kernel.org> Link: https://lkml.kernel.org/r/20201103012358.168682-1-maskray@google.com
This commit is contained in:
parent
3cea11cd5e
commit
4d6ffa27b8
@ -16,8 +16,6 @@
|
|||||||
* to a jmp to memcpy_erms which does the REP; MOVSB mem copy.
|
* to a jmp to memcpy_erms which does the REP; MOVSB mem copy.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
.weak memcpy
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* memcpy - Copy a memory block.
|
* memcpy - Copy a memory block.
|
||||||
*
|
*
|
||||||
@ -30,7 +28,7 @@
|
|||||||
* rax original destination
|
* rax original destination
|
||||||
*/
|
*/
|
||||||
SYM_FUNC_START_ALIAS(__memcpy)
|
SYM_FUNC_START_ALIAS(__memcpy)
|
||||||
SYM_FUNC_START_LOCAL(memcpy)
|
SYM_FUNC_START_WEAK(memcpy)
|
||||||
ALTERNATIVE_2 "jmp memcpy_orig", "", X86_FEATURE_REP_GOOD, \
|
ALTERNATIVE_2 "jmp memcpy_orig", "", X86_FEATURE_REP_GOOD, \
|
||||||
"jmp memcpy_erms", X86_FEATURE_ERMS
|
"jmp memcpy_erms", X86_FEATURE_ERMS
|
||||||
|
|
||||||
|
@ -24,9 +24,7 @@
|
|||||||
* Output:
|
* Output:
|
||||||
* rax: dest
|
* rax: dest
|
||||||
*/
|
*/
|
||||||
.weak memmove
|
SYM_FUNC_START_WEAK(memmove)
|
||||||
|
|
||||||
SYM_FUNC_START_ALIAS(memmove)
|
|
||||||
SYM_FUNC_START(__memmove)
|
SYM_FUNC_START(__memmove)
|
||||||
|
|
||||||
mov %rdi, %rax
|
mov %rdi, %rax
|
||||||
|
@ -6,8 +6,6 @@
|
|||||||
#include <asm/alternative-asm.h>
|
#include <asm/alternative-asm.h>
|
||||||
#include <asm/export.h>
|
#include <asm/export.h>
|
||||||
|
|
||||||
.weak memset
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* ISO C memset - set a memory block to a byte value. This function uses fast
|
* ISO C memset - set a memory block to a byte value. This function uses fast
|
||||||
* string to get better performance than the original function. The code is
|
* string to get better performance than the original function. The code is
|
||||||
@ -19,7 +17,7 @@
|
|||||||
*
|
*
|
||||||
* rax original destination
|
* rax original destination
|
||||||
*/
|
*/
|
||||||
SYM_FUNC_START_ALIAS(memset)
|
SYM_FUNC_START_WEAK(memset)
|
||||||
SYM_FUNC_START(__memset)
|
SYM_FUNC_START(__memset)
|
||||||
/*
|
/*
|
||||||
* Some CPUs support enhanced REP MOVSB/STOSB feature. It is recommended
|
* Some CPUs support enhanced REP MOVSB/STOSB feature. It is recommended
|
||||||
|
Loading…
Reference in New Issue
Block a user