On 8/23/2022 12:45 AM, Vishal Verma wrote:
Static analysis reports a couple of issues in add_cxl_region(). Firstly,
'path' wasn't freed in the success case, only in the error case.
Secondly, the error handling after 'calloc()'ing the region object
erroneously jumped to the error path which tried to free the region object.

Add anew error label to just free 'path' and return for this exit case.

Cc: Dan Williams <[email protected]>
Signed-off-by: Vishal Verma <[email protected]>
Reviewed-by: Dave Jiang <[email protected]>
---
  cxl/lib/libcxl.c | 4 +++-
  1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/cxl/lib/libcxl.c b/cxl/lib/libcxl.c
index 021d59f..e8c5d44 100644
--- a/cxl/lib/libcxl.c
+++ b/cxl/lib/libcxl.c
@@ -482,7 +482,7 @@ static void *add_cxl_region(void *parent, int id, const 
char *cxlregion_base)
region = calloc(1, sizeof(*region));
        if (!region)
-               goto err;
+               goto err_path;
region->id = id;
        region->ctx = ctx;
@@ -551,11 +551,13 @@ static void *add_cxl_region(void *parent, int id, const 
char *cxlregion_base)
list_add_sorted(&decoder->regions, region, list, region_start_cmp); + free(path);
        return region;
  err:
        free(region->dev_path);
        free(region->dev_buf);
        free(region);
+err_path:
        free(path);
        return NULL;
  }

Reply via email to