Paul Wise (Debian) has uploaded a new change for review. ( https://review.coreboot.org/19562 )
Change subject: intelmetool: handle failures to mmap MEI memory ......................................................................
intelmetool: handle failures to mmap MEI memory
Fixes crashes when there is an error mapping memory.
Error mapping physical memory 0x0000004275159040 [0x4000] ERRNO=1 Segmentation fault (core dumped)
Change-Id: I5becc0c2870dd97297c4e8d1b101b95b31792ca7 Signed-off-by: Paul Wise pabs3@bonedaddy.net --- M util/intelmetool/intelmetool.c M util/intelmetool/me.c 2 files changed, 14 insertions(+), 0 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/62/19562/1
diff --git a/util/intelmetool/intelmetool.c b/util/intelmetool/intelmetool.c index 62dc4d9..11c2120 100644 --- a/util/intelmetool/intelmetool.c +++ b/util/intelmetool/intelmetool.c @@ -83,6 +83,10 @@ uint8_t *dump;
dump = map_physical_exact((off_t)me_clone, (void *)me_clone, 0x2000000); + if (dump == NULL) { + printf("Could not map ME memory\n"); + return; + } zeroit(dump, 0x2000000); printf("Send magic command for memory clone\n");
@@ -210,6 +214,12 @@
rcba_phys = pci_read_long(sb, 0xf0) & 0xfffffffe; rcba = map_physical((off_t)rcba_phys, size); + if (rcba == NULL) { + printf("Could not map MEI PCI device memory\n"); + pci_free_dev(sb); + pci_cleanup(pacc); + return 1; + }
//printf("RCBA at 0x%08" PRIx32 "\n", (uint32_t)rcba_phys); fd2 = *(uint32_t *)(rcba + FD2); diff --git a/util/intelmetool/me.c b/util/intelmetool/me.c index da5fb716..8c703a3 100644 --- a/util/intelmetool/me.c +++ b/util/intelmetool/me.c @@ -581,6 +581,10 @@ mei_base_address = dev->base_addr[0] & ~0xf; pagerounded = mei_base_address & ~0xfff; mei_mmap = map_physical(pagerounded, 0x2000) + mei_base_address - pagerounded; + if (mei_mmap == NULL) { + printf("Could not map ME setup memory\n"); + return 1; + }
/* Ensure Memory and Bus Master bits are set */ reg32 = pci_read_long(dev, PCI_COMMAND);