Felix Held has submitted this change. ( https://review.coreboot.org/c/coreboot/+/60209 )
Change subject: soc/amd/common/lpc/espi_util: handle espi_get_configuration error ......................................................................
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 felix-coreboot@felixheld.de Change-Id: Iff1a0670e17b9d6c6f4daf2ea56badf6c428b8c9 Reviewed-on: https://review.coreboot.org/c/coreboot/+/60209 Tested-by: build bot (Jenkins) no-reply@coreboot.org Reviewed-by: Raul Rangel rrangel@chromium.org --- M src/soc/amd/common/block/lpc/espi_util.c 1 file changed, 2 insertions(+), 1 deletion(-)
Approvals: build bot (Jenkins): Verified Raul Rangel: Looks good to me, approved
diff --git a/src/soc/amd/common/block/lpc/espi_util.c b/src/soc/amd/common/block/lpc/espi_util.c index 1d7be67..d9b4715 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 @@
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));