[dm-devel] [PATCH] libmpathpersist: fix resource leak in update_map_pr()
Benjamin Marzinski
bmarzins at redhat.com
Thu Feb 2 14:46:58 UTC 2023
On Thu, Feb 02, 2023 at 09:42:20AM +0100, mwilck at suse.com wrote:
> From: Martin Wilck <mwilck at suse.com>
>
> The "no available paths" case would leak the memory resp points to.
> Found by coverity.
>
> Fixes: 50e2c16 ("multipathd: handle no active paths in update_map_pr")
Oops.
Reviewed-by: Benjamin Marzinski <bmarzins at redhat.com>
>
> Signed-off-by: Martin Wilck <mwilck at suse.com>
> ---
> libmpathpersist/mpath_persist_int.c | 15 ++++++++-------
> 1 file changed, 8 insertions(+), 7 deletions(-)
>
> diff --git a/libmpathpersist/mpath_persist_int.c b/libmpathpersist/mpath_persist_int.c
> index 8b52b74..178c2f5 100644
> --- a/libmpathpersist/mpath_persist_int.c
> +++ b/libmpathpersist/mpath_persist_int.c
> @@ -733,7 +733,7 @@ int update_map_pr(struct multipath *mpp)
> int noisy=0;
> struct prin_resp *resp;
> unsigned int i;
> - int ret, isFound;
> + int ret = MPATH_PR_OTHER, isFound;
>
> if (!get_be64(mpp->reservation_key))
> {
> @@ -754,7 +754,7 @@ int update_map_pr(struct multipath *mpp)
> {
> condlog(0,"%s: No available paths to check pr status",
> mpp->alias);
> - return MPATH_PR_OTHER;
> + goto out;
> }
> mpp->prflag = PRFLAG_UNSET;
> ret = mpath_prin_activepath(mpp, MPATH_PRIN_RKEY_SA, resp, noisy);
> @@ -762,15 +762,15 @@ int update_map_pr(struct multipath *mpp)
> if (ret != MPATH_PR_SUCCESS )
> {
> condlog(0,"%s : pr in read keys service action failed Error=%d", mpp->alias, ret);
> - free(resp);
> - return ret;
> + goto out;
> }
>
> + ret = MPATH_PR_SUCCESS;
> +
> if (resp->prin_descriptor.prin_readkeys.additional_length == 0 )
> {
> condlog(3,"%s: No key found. Device may not be registered. ", mpp->alias);
> - free(resp);
> - return MPATH_PR_SUCCESS;
> + goto out;
> }
>
> condlog(2, "%s: Multipath reservation_key: 0x%" PRIx64 " ", mpp->alias,
> @@ -795,6 +795,7 @@ int update_map_pr(struct multipath *mpp)
> condlog(2, "%s: prflag flag set.", mpp->alias );
> }
>
> +out:
> free(resp);
> - return MPATH_PR_SUCCESS;
> + return ret;
> }
> --
> 2.39.1
More information about the dm-devel
mailing list