From: Andrew Goodbody Date: Thu, 31 Jul 2025 11:11:47 +0000 (+0100) Subject: mmc: owl_mmc: Do not dereference data before NULL check X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=6e382d8fc5ee6876ade500222cb0ade9cdc597ed;p=thirdparty%2Fu-boot.git mmc: owl_mmc: Do not dereference data before NULL check In owl_mmc_prepare_data there is a NULL check for the pointer data but it happens after data has already been dereferenced. Refactor the code so that the NULL check happens before any code dereferences data. This issue was found by Smatch. Signed-off-by: Andrew Goodbody --- diff --git a/drivers/mmc/owl_mmc.c b/drivers/mmc/owl_mmc.c index bd4906f58e7..c18807b1f49 100644 --- a/drivers/mmc/owl_mmc.c +++ b/drivers/mmc/owl_mmc.c @@ -135,19 +135,19 @@ static void owl_mmc_prepare_data(struct owl_mmc_priv *priv, setbits_le32(priv->reg_base + OWL_REG_SD_EN, OWL_SD_EN_BSEL); - writel(data->blocks, priv->reg_base + OWL_REG_SD_BLK_NUM); - writel(data->blocksize, priv->reg_base + OWL_REG_SD_BLK_SIZE); - total = data->blocksize * data->blocks; - - if (total < 512) - writel(total, priv->reg_base + OWL_REG_SD_BUF_SIZE); - else - writel(512, priv->reg_base + OWL_REG_SD_BUF_SIZE); - /* DMA STOP */ writel(0x0, SD_DMA_CHANNEL(priv->dma_channel, 0) + DMA_START); if (data) { + writel(data->blocks, priv->reg_base + OWL_REG_SD_BLK_NUM); + writel(data->blocksize, priv->reg_base + OWL_REG_SD_BLK_SIZE); + total = data->blocksize * data->blocks; + + if (total < 512) + writel(total, priv->reg_base + OWL_REG_SD_BUF_SIZE); + else + writel(512, priv->reg_base + OWL_REG_SD_BUF_SIZE); + if (data->flags == MMC_DATA_READ) { buf = (ulong) (data->dest); owl_dma_config(priv, (ulong) priv->reg_base +