forked from Intel-BMC/linux
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
x86, nfit_test: Add unit test for memcpy_mcsafe()
Given the fact that the ACPI "EINJ" (error injection) facility is not universally available, implement software infrastructure to validate the memcpy_mcsafe() exception handling implementation. For each potential read exception point in memcpy_mcsafe(), inject a emulated exception point at the address identified by 'mcsafe_inject' variable. With this infrastructure implement a test to validate that the 'bytes remaining' calculation is correct for a range of various source buffer alignments. This code is compiled out by default. The CONFIG_MCSAFE_DEBUG configuration symbol needs to be manually enabled by editing Kconfig.debug. I.e. this functionality can not be accidentally enabled by a user / distro, it's only for development. Cc: <x86@kernel.org> Cc: Ingo Molnar <mingo@redhat.com> Cc: Borislav Petkov <bp@alien8.de> Cc: Tony Luck <tony.luck@intel.com> Cc: Al Viro <viro@zeniv.linux.org.uk> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Andy Lutomirski <luto@amacapital.net> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Linus Torvalds <torvalds@linux-foundation.org> Reported-by: Tony Luck <tony.luck@intel.com> Signed-off-by: Dan Williams <dan.j.williams@intel.com>
- Loading branch information
Showing
4 changed files
with
192 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,75 @@ | ||
/* SPDX-License-Identifier: GPL-2.0 */ | ||
#ifndef _MCSAFE_TEST_H_ | ||
#define _MCSAFE_TEST_H_ | ||
|
||
#ifndef __ASSEMBLY__ | ||
#ifdef CONFIG_MCSAFE_TEST | ||
extern unsigned long mcsafe_test_src; | ||
extern unsigned long mcsafe_test_dst; | ||
|
||
static inline void mcsafe_inject_src(void *addr) | ||
{ | ||
if (addr) | ||
mcsafe_test_src = (unsigned long) addr; | ||
else | ||
mcsafe_test_src = ~0UL; | ||
} | ||
|
||
static inline void mcsafe_inject_dst(void *addr) | ||
{ | ||
if (addr) | ||
mcsafe_test_dst = (unsigned long) addr; | ||
else | ||
mcsafe_test_dst = ~0UL; | ||
} | ||
#else /* CONFIG_MCSAFE_TEST */ | ||
static inline void mcsafe_inject_src(void *addr) | ||
{ | ||
} | ||
|
||
static inline void mcsafe_inject_dst(void *addr) | ||
{ | ||
} | ||
#endif /* CONFIG_MCSAFE_TEST */ | ||
|
||
#else /* __ASSEMBLY__ */ | ||
#include <asm/export.h> | ||
|
||
#ifdef CONFIG_MCSAFE_TEST | ||
.macro MCSAFE_TEST_CTL | ||
.pushsection .data | ||
.align 8 | ||
.globl mcsafe_test_src | ||
mcsafe_test_src: | ||
.quad 0 | ||
EXPORT_SYMBOL_GPL(mcsafe_test_src) | ||
.globl mcsafe_test_dst | ||
mcsafe_test_dst: | ||
.quad 0 | ||
EXPORT_SYMBOL_GPL(mcsafe_test_dst) | ||
.popsection | ||
.endm | ||
|
||
.macro MCSAFE_TEST_SRC reg count target | ||
leaq \count(\reg), %r9 | ||
cmp mcsafe_test_src, %r9 | ||
ja \target | ||
.endm | ||
|
||
.macro MCSAFE_TEST_DST reg count target | ||
leaq \count(\reg), %r9 | ||
cmp mcsafe_test_dst, %r9 | ||
ja \target | ||
.endm | ||
#else | ||
.macro MCSAFE_TEST_CTL | ||
.endm | ||
|
||
.macro MCSAFE_TEST_SRC reg count target | ||
.endm | ||
|
||
.macro MCSAFE_TEST_DST reg count target | ||
.endm | ||
#endif /* CONFIG_MCSAFE_TEST */ | ||
#endif /* __ASSEMBLY__ */ | ||
#endif /* _MCSAFE_TEST_H_ */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters