The 05/31/2023 10:27, Li Zhijian wrote:
> p.memdevs should be released in error path
> 
> Signed-off-by: Li Zhijian <lizhij...@fujitsu.com>
> ---

Make sense to me.

Fan

>  cxl/region.c | 22 +++++++++++++---------
>  1 file changed, 13 insertions(+), 9 deletions(-)
> 
> diff --git a/cxl/region.c b/cxl/region.c
> index 07ce4a319fd0..7f60094e8b49 100644
> --- a/cxl/region.c
> +++ b/cxl/region.c
> @@ -300,11 +300,11 @@ static int parse_create_options(struct cxl_ctx *ctx, 
> int count,
>               if (p->mode == CXL_DECODER_MODE_RAM && param.uuid) {
>                       log_err(&rl,
>                               "can't set UUID for ram / volatile regions");
> -                     return -EINVAL;
> +                     goto err;
>               }
>               if (p->mode == CXL_DECODER_MODE_NONE) {
>                       log_err(&rl, "unsupported type: %s\n", param.type);
> -                     return -EINVAL;
> +                     goto err;
>               }
>       } else {
>               p->mode = CXL_DECODER_MODE_PMEM;
> @@ -314,21 +314,21 @@ static int parse_create_options(struct cxl_ctx *ctx, 
> int count,
>               p->size = parse_size64(param.size);
>               if (p->size == ULLONG_MAX) {
>                       log_err(&rl, "Invalid size: %s\n", param.size);
> -                     return -EINVAL;
> +                     goto err;
>               }
>       }
>  
>       if (param.ways <= 0) {
>               log_err(&rl, "Invalid interleave ways: %d\n", param.ways);
> -             return -EINVAL;
> +             goto err;
>       } else if (param.ways < INT_MAX) {
>               p->ways = param.ways;
>               if (!validate_ways(p, count))
> -                     return -EINVAL;
> +                     goto err;
>       } else if (count) {
>               p->ways = count;
>               if (!validate_ways(p, count))
> -                     return -EINVAL;
> +                     goto err;
>       } else
>               p->ways = p->num_memdevs;
>  
> @@ -336,7 +336,7 @@ static int parse_create_options(struct cxl_ctx *ctx, int 
> count,
>               if (param.granularity <= 0) {
>                       log_err(&rl, "Invalid interleave granularity: %d\n",
>                               param.granularity);
> -                     return -EINVAL;
> +                     goto err;
>               }
>               p->granularity = param.granularity;
>       }
> @@ -346,18 +346,22 @@ static int parse_create_options(struct cxl_ctx *ctx, 
> int count,
>                       log_err(&rl,
>                               "size (%lu) is not an integral multiple of 
> interleave-ways (%u)\n",
>                               p->size, p->ways);
> -                     return -EINVAL;
> +                     goto err;
>               }
>       }
>  
>       if (param.uuid) {
>               if (uuid_parse(param.uuid, p->uuid)) {
>                       error("failed to parse uuid: '%s'\n", param.uuid);
> -                     return -EINVAL;
> +                     goto err;
>               }
>       }
>  
>       return 0;
> +
> +err:
> +     json_object_put(p->memdevs);
> +     return -EINVAL;
>  }
>  
>  static int parse_region_options(int argc, const char **argv,
> -- 
> 2.29.2
> 

-- 
Fan Ni <ni...@outlook.com>

Reply via email to