From e47694ebe81475432c2ebd21b5ec7a28be439f04 Mon Sep 17 00:00:00 2001 From: Nikhil Prakash V Date: Tue, 6 Mar 2018 12:50:31 +0530 Subject: [PATCH] ipq807x: Changes for fixing kw issues Adding nullpointer condition checks before the pointer is accessed or passed to a function as argument. Change-Id: I6848c132076708f69fad00a75e42a1c2f33b6215 Signed-off-by: Nikhil Prakash V --- common/cmd_disk.c | 2 +- common/cmd_nand.c | 8 ++++---- drivers/mmc/sdhci.c | 40 +++++++++++++++++++++++----------------- 3 files changed, 28 insertions(+), 22 deletions(-) diff --git a/common/cmd_disk.c b/common/cmd_disk.c index 8a1fda9f68..9dbe550fb4 100644 --- a/common/cmd_disk.c +++ b/common/cmd_disk.c @@ -111,7 +111,7 @@ int common_diskboot(cmd_tbl_t *cmdtp, const char *intf, int argc, #if defined(CONFIG_FIT) /* This cannot be done earlier, * we need complete FIT image in RAM first */ - if (genimg_get_format((void *) addr) == IMAGE_FORMAT_FIT) { + if (fit_hdr && genimg_get_format((void *)addr) == IMAGE_FORMAT_FIT) { if (!fit_check_format(fit_hdr)) { bootstage_error(BOOTSTAGE_ID_IDE_FIT_READ); puts("** Bad FIT image format\n"); diff --git a/common/cmd_nand.c b/common/cmd_nand.c index 190275d049..c3e46d88e3 100644 --- a/common/cmd_nand.c +++ b/common/cmd_nand.c @@ -872,14 +872,14 @@ static int nand_load_image(cmd_tbl_t *cmdtp, nand_info_t *nand, #if defined(CONFIG_FIT) /* This cannot be done earlier, we need complete FIT image in RAM first */ - if (genimg_get_format ((void *)addr) == IMAGE_FORMAT_FIT) { - if (!fit_check_format (fit_hdr)) { + if (fit_hdr && genimg_get_format((void *)addr) == IMAGE_FORMAT_FIT) { + if (!fit_check_format(fit_hdr)) { bootstage_error(BOOTSTAGE_ID_NAND_FIT_READ); - puts ("** Bad FIT image format\n"); + puts("** Bad FIT image format\n"); return 1; } bootstage_mark(BOOTSTAGE_ID_NAND_FIT_READ_OK); - fit_print_contents (fit_hdr); + fit_print_contents(fit_hdr); } #endif diff --git a/drivers/mmc/sdhci.c b/drivers/mmc/sdhci.c index 03beb18a0f..a38af31cb4 100644 --- a/drivers/mmc/sdhci.c +++ b/drivers/mmc/sdhci.c @@ -79,21 +79,24 @@ static struct adma_desc *sdhci_prepare_descriptors(void *data, uint32_t len) uint32_t table_len = 0; if (len <= SDHCI_ADMA_DESC_LINE_SZ) { - list = (struct adma_desc *) memalign(CACHE_LINE_SIZE, sizeof(struct adma_desc)); + list = (struct adma_desc *)memalign(CACHE_LINE_SIZE, + sizeof(struct adma_desc)); if (!list) { printf("Error allocating memory\n"); assert(0); - } - - list[0].addr = (uint32_t)data; - list[0].len = (len < SDHCI_ADMA_DESC_LINE_SZ) ? len : (SDHCI_ADMA_DESC_LINE_SZ & 0xffff); - list[0].tran_att = SDHCI_ADMA_TRANS_VALID | SDHCI_ADMA_TRANS_DATA - | SDHCI_ADMA_TRANS_END; + } else { + list[0].addr = (uint32_t)data; + list[0].len = (len < SDHCI_ADMA_DESC_LINE_SZ) ? len : + (SDHCI_ADMA_DESC_LINE_SZ & 0xffff); + list[0].tran_att = SDHCI_ADMA_TRANS_VALID | + SDHCI_ADMA_TRANS_DATA | SDHCI_ADMA_TRANS_END; #if !defined(CONFIG_SYS_DCACHE_OFF) - flush_cache((unsigned long)list, sizeof(struct adma_desc)); + flush_cache((unsigned long)list, + sizeof(struct adma_desc)); #endif + } } else { list_len = len / SDHCI_ADMA_DESC_LINE_SZ; remain = len - (list_len * SDHCI_ADMA_DESC_LINE_SZ); @@ -108,26 +111,29 @@ static struct adma_desc *sdhci_prepare_descriptors(void *data, uint32_t len) if (!list) { printf("Allocating memory failed\n"); assert(0); - } + } else { + memset((void *)list, 0, table_len); - memset((void *) list, 0, table_len); - - for (i = 0; i < (list_len - 1); i++) { + for (i = 0; i < (list_len - 1); i++) { list[i].addr = (uint32_t)data; list[i].len = (SDHCI_ADMA_DESC_LINE_SZ & 0xffff); - list[i].tran_att = SDHCI_ADMA_TRANS_VALID | SDHCI_ADMA_TRANS_DATA; + list[i].tran_att = SDHCI_ADMA_TRANS_VALID | + SDHCI_ADMA_TRANS_DATA; data += SDHCI_ADMA_DESC_LINE_SZ; len -= SDHCI_ADMA_DESC_LINE_SZ; } list[list_len - 1].addr = (uint32_t)data; - list[list_len - 1].len = (len < SDHCI_ADMA_DESC_LINE_SZ) ? len : (SDHCI_ADMA_DESC_LINE_SZ & 0xffff); - list[list_len - 1].tran_att = SDHCI_ADMA_TRANS_VALID | SDHCI_ADMA_TRANS_DATA | - SDHCI_ADMA_TRANS_END; + list[list_len - 1].len = (len < SDHCI_ADMA_DESC_LINE_SZ) + ? len : (SDHCI_ADMA_DESC_LINE_SZ & 0xffff); + list[list_len - 1].tran_att = SDHCI_ADMA_TRANS_VALID | + SDHCI_ADMA_TRANS_DATA + | SDHCI_ADMA_TRANS_END; #if !defined(CONFIG_SYS_DCACHE_OFF) - flush_cache((unsigned long)list, table_len); + flush_cache((unsigned long)list, table_len); #endif + } }