Commit c74d3c18 authored by Kees Cook's avatar Kees Cook Committed by Vasily Gorbik
Browse files

s390/speculation: Use statically initialized const for instructions



In preparation for FORTIFY_SOURCE performing compile-time and run-time
field bounds checking for memcpy(), memmove(), and memset(), avoid
confusing the checks when using a static const source.

Move the static const array into a variable so the compiler can perform
appropriate bounds checking.

Signed-off-by: default avatarKees Cook <keescook@chromium.org>
Link: https://lore.kernel.org/r/20210616201823.1245603-1-keescook@chromium.org


Signed-off-by: default avatarVasily Gorbik <gor@linux.ibm.com>
parent e5e1bdf0
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -99,6 +99,7 @@ early_param("spectre_v2", spectre_v2_setup_early);
static void __init_or_module __nospec_revert(s32 *start, s32 *end)
{
	enum { BRCL_EXPOLINE, BRASL_EXPOLINE } type;
	static const u8 branch[] = { 0x47, 0x00, 0x07, 0x00 };
	u8 *instr, *thunk, *br;
	u8 insnbuf[6];
	s32 *epo;
@@ -128,7 +129,7 @@ static void __init_or_module __nospec_revert(s32 *start, s32 *end)
		if ((br[0] & 0xbf) != 0x07 || (br[1] & 0xf0) != 0xf0)
			continue;

		memcpy(insnbuf + 2, (char[]) { 0x47, 0x00, 0x07, 0x00 }, 4);
		memcpy(insnbuf + 2, branch, sizeof(branch));
		switch (type) {
		case BRCL_EXPOLINE:
			insnbuf[0] = br[0];