mirror of
https://github.com/torvalds/linux.git
synced 2026-09-22 20:54:03 +02:00
x86/boot: Add volatile, clobbers and zero-length test in memcmp()
Add the volatile qualifier and clobbers parameter to prevent bugs with
instruction reordering and optimization.
Also add TEST for the zero-length case to set ZF, as, if the count register
is zero, the REPE prefix does not run the CMPSB instruction, leaving the ZF
flag undetermined.
[ bp: Add a comment about the len==0 case. ]
Fixes: 62bd0337d0 ("Top header file for new x86 setup code")
Closes: https://sashiko.dev/#/patchset/20260701-pvh-kasan-inline-v6-0-ba99045dfa9f%40igalia.com
Suggested-by: Borislav Petkov <bp@alien8.de>
Signed-off-by: Mauricio Faria de Oliveira <mfo@igalia.com>
Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
Link: https://lore.kernel.org/all/20260721-pvh-kasan-inline-v7-2-38979a50cef0@igalia.com
This commit is contained in:
parent
f5098b6bae
commit
a8c171c107
|
|
@ -32,8 +32,15 @@
|
|||
int memcmp(const void *s1, const void *s2, size_t len)
|
||||
{
|
||||
bool diff;
|
||||
asm("repe cmpsb"
|
||||
: "=@ccnz" (diff), "+D" (s1), "+S" (s2), "+c" (len));
|
||||
|
||||
/*
|
||||
* Make sure ZF is properly set in the len==0 case because in it,
|
||||
* RCX==0 and the REPE; CMPSB won't get executed.
|
||||
*/
|
||||
asm volatile("test %3, %3\n\t"
|
||||
"repe cmpsb"
|
||||
: "=@ccnz" (diff), "+D" (s1), "+S" (s2), "+c" (len)
|
||||
: : "cc", "memory");
|
||||
return diff;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user