Patrick Georgi (pgeorgi@google.com) just uploaded a new patch set to gerrit, which you can find at https://review.coreboot.org/18033
-gerrit
commit 27333e5add4915724aa0ec53fa59f06b18d8e588 Author: Patrick Georgi pgeorgi@chromium.org Date: Wed Jan 4 21:47:19 2017 +0100
libpayload: ahci: avoid several memleaks when failing on init
Change-Id: If82a3c453dbd71470d06d2c77d54065b9206b0fd Signed-off-by: Patrick Georgi pgeorgi@chromium.org Found-by: Coverity Scan #1260719, #1260727, #1261090, #1261098 --- payloads/libpayload/drivers/storage/ahci.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/payloads/libpayload/drivers/storage/ahci.c b/payloads/libpayload/drivers/storage/ahci.c index 0e7fd7d..d1dd1fa 100644 --- a/payloads/libpayload/drivers/storage/ahci.c +++ b/payloads/libpayload/drivers/storage/ahci.c @@ -121,11 +121,11 @@ static int ahci_dev_init(hba_ctrl_t *const ctrl,
/* Set command list base and received FIS base. */ if (ahci_cmdengine_stop(port)) - return 1; + goto _cleanup_ret; port->cmdlist_base = virt_to_phys(cmdlist); port->frameinfo_base = virt_to_phys(rcvd_fis); if (ahci_cmdengine_start(port)) - return 1; + goto _cleanup_ret; /* Put port into active state. */ port->cmd_stat |= HBA_PxCMD_ICC_ACTIVE;
@@ -177,15 +177,15 @@ _cleanup_ret: /* Clean up (not reached for initialized devices). */ if (dev) free(dev); + if (rcvd_fis) + free((void *)rcvd_fis); + if (cmdtable) + free((void *)cmdtable); + if (cmdlist) + free((void *)cmdlist); if (!ahci_cmdengine_stop(port)) { port->cmdlist_base = 0; port->frameinfo_base = 0; - if (rcvd_fis) - free((void *)rcvd_fis); - if (cmdtable) - free((void *)cmdtable); - if (cmdlist) - free((void *)cmdlist); } return ret; }