In disassemble_map func, pgp will be added to mpp->pg by calling add_pathgroup after allocing a pathgroup (pgp) successfully. However, if add_pathgroup fails, the pgp is actually not inserted into mpp->pg. So, calling free_pgvec(mpp->pg) cannot free the pgp, then memory leak problem occurs. disassemble_map: -> pgp = alloc_pathgroup() -> if add_pathgroup(mpp, pgp) fails -> goto out out: free_pgvec(mpp->pg, KEEP_PATHS); Here, we will call free_pathgroup(pgp) before going to out tag. Signed-off-by: Zhiqiang Liu <liuzhiqiang26@xxxxxxxxxx> Signed-off-by: lixiaokeng <lixiaokeng@xxxxxxxxxx> --- libmultipath/dmparser.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/libmultipath/dmparser.c b/libmultipath/dmparser.c index ac13ec06..6225838b 100644 --- a/libmultipath/dmparser.c +++ b/libmultipath/dmparser.c @@ -268,8 +268,10 @@ int disassemble_map(vector pathvec, char *params, struct multipath *mpp, if (!pgp) goto out; - if (add_pathgroup(mpp, pgp)) + if (add_pathgroup(mpp, pgp)) { + free_pathgroup(pgp, KEEP_PATHS); goto out; + } p += get_word(p, &word); -- 2.24.0.windows.2 -- dm-devel mailing list dm-devel@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/dm-devel