Patch "x86/boot: Fix kexec booting failure in the SEV bit detection code" has been added to the 4.18-stable tree

gregkh at gregkh at
Thu Oct 18 02:50:52 PDT 2018

This is a note to let you know that I've just added the patch titled

    x86/boot: Fix kexec booting failure in the SEV bit detection code

to the 4.18-stable tree which can be found at:;a=summary

The filename of the patch is:
and it can be found in the queue-4.18 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable at> know about it.

>From foo at baz Thu Oct 18 11:08:35 CEST 2018
From: Kairui Song <kasong at>
Date: Thu, 27 Sep 2018 20:38:45 +0800
Subject: x86/boot: Fix kexec booting failure in the SEV bit detection code

From: Kairui Song <kasong at>

[ Upstream commit bdec8d7fa55e6f5314ed72e5a0b435d90ff90548 ]


  1958b5fc4010 ("x86/boot: Add early boot support when running with SEV active")

can occasionally cause system resets when kexec-ing a second kernel even
if SEV is not active.

That's because get_sev_encryption_bit() uses 32-bit rIP-relative
addressing to read the value of enc_bit - a variable which caches a
previously detected encryption bit position - but kexec may allocate
the early boot code to a higher location, beyond the 32-bit addressing

In this case, garbage will be read and get_sev_encryption_bit() will
return the wrong value, leading to accessing memory with the wrong
encryption setting.

Therefore, remove enc_bit, and thus get rid of the need to do 32-bit
rIP-relative addressing in the first place.

 [ bp: massage commit message heavily. ]

Fixes: 1958b5fc4010 ("x86/boot: Add early boot support when running with SEV active")
Suggested-by: Borislav Petkov <bp at>
Signed-off-by: Kairui Song <kasong at>
Signed-off-by: Borislav Petkov <bp at>
Reviewed-by: Tom Lendacky <thomas.lendacky at>
Cc: linux-kernel at
Cc: tglx at
Cc: mingo at
Cc: hpa at
Cc: brijesh.singh at
Cc: kexec at
Cc: dyoung at
Cc: bhe at
Cc: ghook at
Signed-off-by: Sasha Levin <alexander.levin at>
Signed-off-by: Greg Kroah-Hartman <gregkh at>
 arch/x86/boot/compressed/mem_encrypt.S |   19 -------------------
 1 file changed, 19 deletions(-)

--- a/arch/x86/boot/compressed/mem_encrypt.S
+++ b/arch/x86/boot/compressed/mem_encrypt.S
@@ -25,20 +25,6 @@ ENTRY(get_sev_encryption_bit)
 	push	%ebx
 	push	%ecx
 	push	%edx
-	push	%edi
-	/*
-	 * RIP-relative addressing is needed to access the encryption bit
-	 * variable. Since we are running in 32-bit mode we need this call/pop
-	 * sequence to get the proper relative addressing.
-	 */
-	call	1f
-1:	popl	%edi
-	subl	$1b, %edi
-	movl	enc_bit(%edi), %eax
-	cmpl	$0, %eax
-	jge	.Lsev_exit
 	/* Check if running under a hypervisor */
 	movl	$1, %eax
@@ -69,15 +55,12 @@ ENTRY(get_sev_encryption_bit)
 	movl	%ebx, %eax
 	andl	$0x3f, %eax		/* Return the encryption bit location */
-	movl	%eax, enc_bit(%edi)
 	jmp	.Lsev_exit
 	xor	%eax, %eax
-	movl	%eax, enc_bit(%edi)
-	pop	%edi
 	pop	%edx
 	pop	%ecx
 	pop	%ebx
@@ -113,8 +96,6 @@ ENTRY(set_sev_encryption_mask)
-	.int	0xffffffff
 	.balign	8

Patches currently in stable-queue which might be from kasong at are


More information about the kexec mailing list