target/cortex_m: fix clang static analyzer warning 81/4881/3
authorTomas Vanek <vanekt@fbl.cz>
Thu, 31 Jan 2019 13:21:56 +0000 (14:21 +0100)
committerTomas Vanek <vanekt@fbl.cz>
Thu, 7 Feb 2019 08:03:18 +0000 (08:03 +0000)
Fix "Potential leak of memory pointed to by 'cortex_m'"
and test for NULL return from calloc in cortex_m_target_create()

Change-Id: I4d2bb5bccc57f0ed60696f3d588297a858b8ea60
Signed-off-by: Tomas Vanek <vanekt@fbl.cz>
Reviewed-on: http://openocd.zylin.com/4881
Tested-by: jenkins
Reviewed-by: Moritz Fischer <moritz.fischer@ettus.com>
Reviewed-by: Antonio Borneo <borneo.antonio@gmail.com>
src/target/cortex_m.c

index 34a19e7..62d3760 100644 (file)
@@ -2276,14 +2276,19 @@ static int cortex_m_init_arch_info(struct target *target,
 
 static int cortex_m_target_create(struct target *target, Jim_Interp *interp)
 {
-       struct cortex_m_common *cortex_m = calloc(1, sizeof(struct cortex_m_common));
-       cortex_m->common_magic = CORTEX_M_COMMON_MAGIC;
        struct adiv5_private_config *pc;
 
        pc = (struct adiv5_private_config *)target->private_config;
        if (adiv5_verify_config(pc) != ERROR_OK)
                return ERROR_FAIL;
 
+       struct cortex_m_common *cortex_m = calloc(1, sizeof(struct cortex_m_common));
+       if (cortex_m == NULL) {
+               LOG_ERROR("No memory creating target");
+               return ERROR_FAIL;
+       }
+
+       cortex_m->common_magic = CORTEX_M_COMMON_MAGIC;
        cortex_m->apsel = pc->ap_num;
 
        cortex_m_init_arch_info(target, cortex_m, pc->dap);