Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1543450 > unrolled thread

[PATCH] qed: fix memory leak of a qed_spq_entry on error failure paths

Started byColin King <colin.king@canonical.com>
First post2016-12-16 14:00 +0100
Last post2016-12-18 16:40 +0100
Articles 3 — 3 participants

Back to article view | Back to linux.kernel


Contents

  [PATCH] qed: fix memory leak of a qed_spq_entry on error failure paths Colin King <colin.king@canonical.com> - 2016-12-16 14:00 +0100
    RE: [PATCH] qed: fix memory leak of a qed_spq_entry on error failure  paths "Mintz, Yuval" <Yuval.Mintz@cavium.com> - 2016-12-18 07:50 +0100
      Re: [PATCH] qed: fix memory leak of a qed_spq_entry on error  failure paths David Miller <davem@davemloft.net> - 2016-12-18 16:40 +0100

#1543450 — [PATCH] qed: fix memory leak of a qed_spq_entry on error failure paths

FromColin King <colin.king@canonical.com>
Date2016-12-16 14:00 +0100
Subject[PATCH] qed: fix memory leak of a qed_spq_entry on error failure paths
Message-ID<sP0hc-3GN-39@gated-at.bofh.it>
From: Colin Ian King <colin.king@canonical.com>

A qed_spq_entry entry is allocated by qed_sp_init_request but is not
kfree'd if an error occurs, causing a memory leak. Fix this by
kfree'ing it and also setting *pp_ent to NULL to be safe.

Found with static analysis by CoverityScan, CIDs 1389468-1389470

Signed-off-by: Colin Ian King <colin.king@canonical.com>
---
 drivers/net/ethernet/qlogic/qed/qed_sp_commands.c | 14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

diff --git a/drivers/net/ethernet/qlogic/qed/qed_sp_commands.c b/drivers/net/ethernet/qlogic/qed/qed_sp_commands.c
index a39ef2e..273a6bb 100644
--- a/drivers/net/ethernet/qlogic/qed/qed_sp_commands.c
+++ b/drivers/net/ethernet/qlogic/qed/qed_sp_commands.c
@@ -55,8 +55,10 @@ int qed_sp_init_request(struct qed_hwfn *p_hwfn,
 		break;
 
 	case QED_SPQ_MODE_BLOCK:
-		if (!p_data->p_comp_data)
-			return -EINVAL;
+		if (!p_data->p_comp_data) {
+			rc = -EINVAL;
+			goto err;
+		}
 
 		p_ent->comp_cb.cookie = p_data->p_comp_data->cookie;
 		break;
@@ -71,7 +73,8 @@ int qed_sp_init_request(struct qed_hwfn *p_hwfn,
 	default:
 		DP_NOTICE(p_hwfn, "Unknown SPQE completion mode %d\n",
 			  p_ent->comp_mode);
-		return -EINVAL;
+		rc = -EINVAL;
+		goto err;
 	}
 
 	DP_VERBOSE(p_hwfn, QED_MSG_SPQ,
@@ -85,6 +88,11 @@ int qed_sp_init_request(struct qed_hwfn *p_hwfn,
 	memset(&p_ent->ramrod, 0, sizeof(p_ent->ramrod));
 
 	return 0;
+err:
+	kfree(*pp_ent);
+	*pp_ent = NULL;
+
+	return rc;
 }
 
 static enum tunnel_clss qed_tunn_get_clss_type(u8 type)
-- 
2.10.2

[toc] | [next] | [standalone]


#1544097 — RE: [PATCH] qed: fix memory leak of a qed_spq_entry on error failure paths

From"Mintz, Yuval" <Yuval.Mintz@cavium.com>
Date2016-12-18 07:50 +0100
SubjectRE: [PATCH] qed: fix memory leak of a qed_spq_entry on error failure paths
Message-ID<sPDsd-451-3@gated-at.bofh.it>
In reply to#1543450
> From: Colin Ian King <colin.king@canonical.com>
> 
> A qed_spq_entry entry is allocated by qed_sp_init_request but is not kfree'd
> if an error occurs, causing a memory leak. Fix this by kfree'ing it and also
> setting *pp_ent to NULL to be safe.
> 
> Found with static analysis by CoverityScan, CIDs 1389468-1389470
> 
> Signed-off-by: Colin Ian King <colin.king@canonical.com>
...
> +err:
> +	kfree(*pp_ent);
> +	*pp_ent = NULL;
> +
> +	return rc;
>  }

Hi Colin - thanks for this.
It would have been preferable to return the previously allocated spq entry.
I.e., do:

+err:
+	qed_spq_return_entry(p_hwfn, *pp_ent);
+	*pp_ent = NULL;
+	return rc;

Thanks,
Yuval

[toc] | [prev] | [next] | [standalone]


#1544158 — Re: [PATCH] qed: fix memory leak of a qed_spq_entry on error failure paths

FromDavid Miller <davem@davemloft.net>
Date2016-12-18 16:40 +0100
SubjectRe: [PATCH] qed: fix memory leak of a qed_spq_entry on error failure paths
Message-ID<sPLJ7-1qU-3@gated-at.bofh.it>
In reply to#1544097
From: "Mintz, Yuval" <Yuval.Mintz@cavium.com>
Date: Sun, 18 Dec 2016 06:33:50 +0000

>> From: Colin Ian King <colin.king@canonical.com>
>> 
>> A qed_spq_entry entry is allocated by qed_sp_init_request but is not kfree'd
>> if an error occurs, causing a memory leak. Fix this by kfree'ing it and also
>> setting *pp_ent to NULL to be safe.
>> 
>> Found with static analysis by CoverityScan, CIDs 1389468-1389470
>> 
>> Signed-off-by: Colin Ian King <colin.king@canonical.com>
> ...
>> +err:
>> +	kfree(*pp_ent);
>> +	*pp_ent = NULL;
>> +
>> +	return rc;
>>  }
> 
> Hi Colin - thanks for this.
> It would have been preferable to return the previously allocated spq entry.
> I.e., do:
> 
> +err:
> +	qed_spq_return_entry(p_hwfn, *pp_ent);
> +	*pp_ent = NULL;
> +	return rc;

Looking at this last night, I came to the same conclusion.

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web