diff options
author | Luo Ji <ji.luo@nxp.com> | 2019-03-14 15:04:20 +0800 |
---|---|---|
committer | Ji Luo <ji.luo@nxp.com> | 2019-03-15 12:25:28 +0800 |
commit | 35599c12090d3e52576d41acfb2b81c16811e4f5 (patch) | |
tree | bade05a585b01a6f4001974ca20f9e290a9a3b84 | |
parent | ae4200a47bdb28611ca7270333d209bd0c52e3dd (diff) |
MA-14374 [coverity] Fix coverity issues in fsl_avbkey.c
Fix coverity issues as:
CID 5899697: Dereference before null check (REVERSE_INULL)
CID 3616594: Unchecked return value (CHECKED_RETURN)
CID 3616598: Resource leak (RESOURCE_LEAK)
CID 3616591: Resource leak (RESOURCE_LEAK)
Test: Coverity scan pass.
Change-Id: I70abb41c3cd825c6eec43dc7e5baec716ae46680
Signed-off-by: Luo Ji <ji.luo@nxp.com>
-rw-r--r-- | lib/avb/fsl/fsl_avbkey.c | 57 |
1 files changed, 37 insertions, 20 deletions
diff --git a/lib/avb/fsl/fsl_avbkey.c b/lib/avb/fsl/fsl_avbkey.c index 26afe2448dc..63d51102f3f 100644 --- a/lib/avb/fsl/fsl_avbkey.c +++ b/lib/avb/fsl/fsl_avbkey.c @@ -84,12 +84,14 @@ int read_keyslot_package(struct keyslot_package* kp) { dev_desc = blk_get_dev("mmc", mmcc); #else dev_desc = mmc_get_blk_desc(mmc); - original_part = dev_desc->hwpart; #endif if (NULL == dev_desc) { printf("** Block device MMC %d not supported\n", mmcc); return -1; } +#ifdef CONFIG_BLK + original_part = dev_desc->hwpart; +#endif blksz = dev_desc->blksz; fill = (unsigned char *)memalign(ALIGN_BYTES, blksz); @@ -101,7 +103,10 @@ int read_keyslot_package(struct keyslot_package* kp) { goto fail;; } - mmc_switch_part(mmc, KEYSLOT_HWPARTITION_ID); + if (mmc_switch_part(mmc, KEYSLOT_HWPARTITION_ID) != 0) { + ret = -1; + goto fail; + } #ifndef CONFIG_BLK mmc->block_dev.hwpart = KEYSLOT_HWPARTITION_ID; #else @@ -276,8 +281,9 @@ fail: /* Return to original partition */ if (desc->hwpart != original_part) { if (mmc_switch_part(mmc, original_part) != 0) - return -1; - desc->hwpart = original_part; + ret = -1; + else + desc->hwpart = original_part; } if (blob != NULL) free(blob); @@ -380,8 +386,9 @@ fail: /* Return to original partition */ if (desc->hwpart != original_part) { if (mmc_switch_part(mmc, original_part) != 0) - return -1; - desc->hwpart = original_part; + ret = -1; + else + desc->hwpart = original_part; } if (blob != NULL) free(blob); @@ -576,7 +583,11 @@ int gen_rpmb_key(struct keyslot_package *kp) { } memcpy(fill, kp, sizeof(struct keyslot_package)); - mmc_switch_part(mmc, KEYSLOT_HWPARTITION_ID); + if (mmc_switch_part(mmc, KEYSLOT_HWPARTITION_ID) != 0) { + ret = -1; + goto fail; + } + if (blk_dwrite(dev_desc, KEYSLOT_BLKS, 1, (void *)fill) != 1) { printf("Failed to write rpmbkeyblob."); @@ -586,15 +597,19 @@ int gen_rpmb_key(struct keyslot_package *kp) { /* program key to mmc */ #ifndef CONFIG_BLK if (mmc->block_dev.hwpart != MMC_PART_RPMB) { - if (mmc_switch_part(mmc, MMC_PART_RPMB) != 0) - return -1; - mmc->block_dev.hwpart = MMC_PART_RPMB; + if (mmc_switch_part(mmc, MMC_PART_RPMB) != 0) { + ret = -1; + goto fail; + } else + mmc->block_dev.hwpart = MMC_PART_RPMB; } #else if (dev_desc->hwpart != MMC_PART_RPMB) { - if (mmc_switch_part(mmc, MMC_PART_RPMB) != 0) - return -1; - dev_desc->hwpart = MMC_PART_RPMB; + if (mmc_switch_part(mmc, MMC_PART_RPMB) != 0) { + ret = -1; + goto fail; + } else + dev_desc->hwpart = MMC_PART_RPMB; } #endif if (mmc_rpmb_set_key(mmc, plain_key)) { @@ -605,23 +620,25 @@ int gen_rpmb_key(struct keyslot_package *kp) { ret = 0; fail: - if (fill != NULL) - free(fill); - /* Return to original partition */ #ifndef CONFIG_BLK if (mmc->block_dev.hwpart != original_part) { if (mmc_switch_part(mmc, original_part) != 0) - return -1; - mmc->block_dev.hwpart = original_part; + ret = -1; + else + mmc->block_dev.hwpart = original_part; } #else if (dev_desc->hwpart != original_part) { if (mmc_switch_part(mmc, original_part) != 0) - return -1; - dev_desc->hwpart = original_part; + ret = -1; + else + dev_desc->hwpart = original_part; } #endif + if (fill != NULL) + free(fill); + return ret; } |