From 14604dad4e470e8140d18296bd28b42c4bb26668 Mon Sep 17 00:00:00 2001 From: Nicola Corna Date: Tue, 15 May 2018 17:15:03 +0200 Subject: sb/intel/{bd82x6x,ibexpeak}: Fix out of bounds access in intel_me_status() On Ibex Peak (and maybe also on other platforms), when the AltMeDisable bit is set (-S or -s option of me_cleaner), the ME PCI device disappears from the bus and its configuration space is all ones. This causes a freeze in intel_me_status(), as coreboot tries to access an out of bounds array element. Change-Id: I957abebe1db15ec2c9a2b439f0103106bfa56b33 Signed-off-by: Nicola Corna Reviewed-on: https://review.coreboot.org/26601 Tested-by: build bot (Jenkins) Reviewed-by: Patrick Rudolph --- src/southbridge/intel/bd82x6x/early_me_mrc.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) (limited to 'src/southbridge/intel/bd82x6x/early_me_mrc.c') diff --git a/src/southbridge/intel/bd82x6x/early_me_mrc.c b/src/southbridge/intel/bd82x6x/early_me_mrc.c index 8faab62c04..a6562c77a7 100644 --- a/src/southbridge/intel/bd82x6x/early_me_mrc.c +++ b/src/southbridge/intel/bd82x6x/early_me_mrc.c @@ -18,6 +18,7 @@ #include #include #include +#include #include #include #include "me.h" @@ -51,11 +52,17 @@ void intel_early_me_status(void) { struct me_hfs hfs; struct me_gmes gmes; + u32 id = pci_read_config32(PCH_ME_DEV, PCI_VENDOR_ID); - pci_read_dword_ptr(&hfs, PCI_ME_HFS); - pci_read_dword_ptr(&gmes, PCI_ME_GMES); + if ((id == 0xffffffff) || (id == 0x00000000) || + (id == 0x0000ffff) || (id == 0xffff0000)) { + printk(BIOS_DEBUG, "Missing Intel ME PCI device.\n"); + } else { + pci_read_dword_ptr(&hfs, PCI_ME_HFS); + pci_read_dword_ptr(&gmes, PCI_ME_GMES); - intel_me_status(&hfs, &gmes); + intel_me_status(&hfs, &gmes); + } } int intel_early_me_init(void) -- cgit v1.2.3