Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1325274

[PATCH 02/17] x86/microcode/intel: Make early loader look for builtin microcode too

From Borislav Petkov <bp@alien8.de>
Newsgroups linux.kernel
Subject [PATCH 02/17] x86/microcode/intel: Make early loader look for builtin microcode too
Date 2016-02-03 12:50 +0100
Message-ID <qY46B-1pi-1@gated-at.bofh.it> (permalink)
References <qY3WW-1lI-33@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


From: Borislav Petkov <bp@suse.de>

Set the initrd @start depending on the presence of an initrd. Otherwise,
builtin microcode loading doesn't work as the start is wrong and we're
using it to compute offset to the microcode blobs.

Signed-off-by: Borislav Petkov <bp@suse.de>
Cc: <stable@vger.kernel.org> # 4.4
---
 arch/x86/kernel/cpu/microcode/intel.c | 24 ++++++++++++++++--------
 1 file changed, 16 insertions(+), 8 deletions(-)

diff --git a/arch/x86/kernel/cpu/microcode/intel.c b/arch/x86/kernel/cpu/microcode/intel.c
index 044bbbbcbaf1..4f4735bd8698 100644
--- a/arch/x86/kernel/cpu/microcode/intel.c
+++ b/arch/x86/kernel/cpu/microcode/intel.c
@@ -551,10 +551,14 @@ scan_microcode(struct mc_saved_data *mc_saved_data, unsigned long *initrd,
 	cd.data = NULL;
 	cd.size = 0;
 
-	cd = find_cpio_data(p, (void *)start, size, &offset);
-	if (!cd.data) {
+	/* try built-in microcode if no initrd */
+	if (!size) {
 		if (!load_builtin_intel_microcode(&cd))
 			return UCODE_ERROR;
+	} else {
+		cd = find_cpio_data(p, (void *)start, size, &offset);
+		if (!cd.data)
+			return UCODE_ERROR;
 	}
 
 	return get_matching_model_microcode(0, start, cd.data, cd.size,
@@ -728,16 +732,20 @@ void __init load_ucode_intel_bsp(void)
 	struct boot_params *p;
 
 	p	= (struct boot_params *)__pa_nodebug(&boot_params);
-	start	= p->hdr.ramdisk_image;
 	size	= p->hdr.ramdisk_size;
 
-	_load_ucode_intel_bsp(
-			(struct mc_saved_data *)__pa_nodebug(&mc_saved_data),
-			(unsigned long *)__pa_nodebug(&mc_saved_in_initrd),
-			start, size);
+	/*
+	 * Set start only if we have an initrd image. We cannot use initrd_start
+	 * because it is not set that early yet.
+	 */
+	start	= (size ? p->hdr.ramdisk_image : 0);
+
+	_load_ucode_intel_bsp((struct mc_saved_data *)__pa_nodebug(&mc_saved_data),
+			      (unsigned long *)__pa_nodebug(&mc_saved_in_initrd),
+			      start, size);
 #else
-	start	= boot_params.hdr.ramdisk_image + PAGE_OFFSET;
 	size	= boot_params.hdr.ramdisk_size;
+	start	= (size ? boot_params.hdr.ramdisk_image + PAGE_OFFSET : 0);
 
 	_load_ucode_intel_bsp(&mc_saved_data, mc_saved_in_initrd, start, size);
 #endif
-- 
2.3.5

Back to linux.kernel | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

[PATCH 00/17] x86/microcode: Untangle loader from BLK_DEV_INITRD Borislav Petkov <bp@alien8.de> - 2016-02-03 12:40 +0100
  [PATCH 02/17] x86/microcode/intel: Make early loader look for builtin microcode too Borislav Petkov <bp@alien8.de> - 2016-02-03 12:50 +0100
  [PATCH 07/17] x86/microcode/intel: Rename local variables of type struct mc_saved_data Borislav Petkov <bp@alien8.de> - 2016-02-03 12:50 +0100
  [PATCH 12/17] x86/microcode/intel: Use *wrmsrl variants Borislav Petkov <bp@alien8.de> - 2016-02-03 12:50 +0100
  [PATCH 10/17] x86/microcode/intel: Move the BUG_ON up and turn it into WARN_ON Borislav Petkov <bp@alien8.de> - 2016-02-03 12:50 +0100
  [PATCH 05/17] x86/microcode: Issue update message only once Borislav Petkov <bp@alien8.de> - 2016-02-03 12:50 +0100
  [PATCH 11/17] x86/microcode/intel: Cleanup apply_microcode_intel() Borislav Petkov <bp@alien8.de> - 2016-02-03 12:50 +0100
  [PATCH 14/17] x86/microcode/intel: Remove unused arg of get_matching_model_microcode() Borislav Petkov <bp@alien8.de> - 2016-02-03 12:50 +0100
  [PATCH 08/17] x86/microcode/intel: Rename mc_saved_count to num_saved Borislav Petkov <bp@alien8.de> - 2016-02-03 12:50 +0100
  [PATCH 04/17] x86/microcode: Remove an unneeded NULL check Borislav Petkov <bp@alien8.de> - 2016-02-03 12:50 +0100
  [PATCH 03/17] x86/microcode: Remove redundant __setup() param parsing Borislav Petkov <bp@alien8.de> - 2016-02-03 12:50 +0100
  [PATCH 17/17] x86/microcode: Document builtin microcode loading method Borislav Petkov <bp@alien8.de> - 2016-02-03 12:50 +0100
  [PATCH 16/17] x86/microcode/AMD: Issue microcode updated message later Borislav Petkov <bp@alien8.de> - 2016-02-03 12:50 +0100
  [PATCH 09/17] x86/microcode/intel: Rename mc_intel variable to mc Borislav Petkov <bp@alien8.de> - 2016-02-03 12:50 +0100
  [PATCH 06/17] x86/microcode/AMD: Drop redundant printk prefix Borislav Petkov <bp@alien8.de> - 2016-02-03 12:50 +0100
  [PATCH 13/17] x86/microcode/intel: Rename mc_saved_in_initrd Borislav Petkov <bp@alien8.de> - 2016-02-03 12:50 +0100
  [PATCH 01/17] x86/microcode: Untangle from BLK_DEV_INITRD Borislav Petkov <bp@alien8.de> - 2016-02-03 12:50 +0100
  [PATCH 15/17] x86/microcode/intel: Cleanup get_matching_model_microcode() Borislav Petkov <bp@alien8.de> - 2016-02-03 12:50 +0100

csiph-web