From 5ba87a80921cc0ef3f164d30ef27d35244131a52 Mon Sep 17 00:00:00 2001 From: Felix Held Date: Sat, 18 Dec 2021 00:41:23 +0100 Subject: [PATCH] soc/amd/common/lpc/espi_util: handle espi_get_configuration error In espi_wait_channel_ready the return value of espi_get_configuration didn't get checked before. In the case of the espi_send_command call in espi_get_configuration returning CB_ERR, espi_get_configuration didn't write to the local config variable, so if this happens in the first pass of the do-while loop, the following espi_slave_is_channel_ready call would use the uninitialized local config variable as parameter. Fix this by checking the return value of espi_get_configuration. TEST=None Signed-off-by: Felix Held Change-Id: Iff1a0670e17b9d6c6f4daf2ea56badf6c428b8c9 Reviewed-on: https://review.coreboot.org/c/coreboot/+/60209 Tested-by: build bot (Jenkins) Reviewed-by: Raul Rangel --- src/soc/amd/common/block/lpc/espi_util.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/soc/amd/common/block/lpc/espi_util.c b/src/soc/amd/common/block/lpc/espi_util.c index 1d7be67c66..d9b4715b5e 100644 --- a/src/soc/amd/common/block/lpc/espi_util.c +++ b/src/soc/amd/common/block/lpc/espi_util.c @@ -772,7 +772,8 @@ static enum cb_err espi_wait_channel_ready(uint16_t slave_reg_addr) stopwatch_init_usecs_expire(&sw, ESPI_CH_READY_TIMEOUT_US); do { - espi_get_configuration(slave_reg_addr, &config); + if (espi_get_configuration(slave_reg_addr, &config) != CB_SUCCESS) + return CB_ERR; if (espi_slave_is_channel_ready(config)) return CB_SUCCESS; } while (!stopwatch_expired(&sw));