From patchwork Fri Nov 27 09:37:21 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rahul Jain X-Patchwork-Id: 7712201 X-Patchwork-Delegate: johannes@sipsolutions.net Return-Path: X-Original-To: patchwork-linux-wireless@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork1.web.kernel.org (Postfix) with ESMTP id 32A249F4F5 for ; Fri, 27 Nov 2015 09:38:16 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 37BF020558 for ; Fri, 27 Nov 2015 09:38:15 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 858092052F for ; Fri, 27 Nov 2015 09:38:13 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754549AbbK0JiM (ORCPT ); Fri, 27 Nov 2015 04:38:12 -0500 Received: from mailout1.samsung.com ([203.254.224.24]:45753 "EHLO mailout1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754185AbbK0Jhv (ORCPT ); Fri, 27 Nov 2015 04:37:51 -0500 Received: from epcpsbgr1.samsung.com (u141.gpu120.samsung.co.kr [203.254.230.141]) by mailout1.samsung.com (Oracle Communications Messaging Server 7.0.5.31.0 64bit (built May 5 2014)) with ESMTP id <0NYG032WWW311N40@mailout1.samsung.com> for linux-wireless@vger.kernel.org; Fri, 27 Nov 2015 18:37:49 +0900 (KST) Received: from epcpsbgm1new.samsung.com ( [172.20.52.123]) by epcpsbgr1.samsung.com (EPCPMTA) with SMTP id 6A.CD.29987.D6428565; Fri, 27 Nov 2015 18:37:49 +0900 (KST) X-AuditID: cbfee68d-f79286d000007523-34-5658246d69d1 Received: from epmmp2 ( [203.254.227.17]) by epcpsbgm1new.samsung.com (EPCPMTA) with SMTP id B4.60.24993.C6428565; Fri, 27 Nov 2015 18:37:49 +0900 (KST) Received: from Rahul.107.10.86.17 ([107.109.203.158]) by mmp2.samsung.com (Oracle Communications Messaging Server 7.0.5.31.0 64bit (built May 5 2014)) with ESMTPA id <0NYG00CBPW2CD5G1@mmp2.samsung.com>; Fri, 27 Nov 2015 18:37:48 +0900 (KST) From: Rahul Jain To: johannes@sipsolutions.net Cc: linux-wireless@vger.kernel.org, Amit Khatri , Rahul Jain Subject: [PATCH] iw:Fix memory leak if nla_put fails Date: Fri, 27 Nov 2015 15:07:21 +0530 Message-id: <1448617041-20120-1-git-send-email-rahul.jain@samsung.com> X-Mailer: git-send-email 1.9.1 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFlrJLMWRmVeSWpSXmKPExsWyRsSkWjdXJSLM4PAyTovrJ7awWXzc8InF 4s2KO+wWP/oDHFg8+rasYvTo793G4vF5k1wAcxSXTUpqTmZZapG+XQJXxt7TDYwFy8UqGjof sDYwdgp2MXJySAiYSOz8c4ANwhaTuHBvPZDNxSEksIJR4urXfcxdjBxgRR3fjSHisxglZpw+ xgLhfGeUeLahjR2km01AU2LZ5YlMILaIgKxE86HLLCA2s0CBxKTe2WC2MNCgizsugdksAqoS y3eeZAWxeQXcJE4d/Ad1hZzEyWOTWUEWSAjcZ5OY/OcHE0SDgMS3yYdYIC6Sldh0gBmiXlLi 4IobLBMYBRcwMqxiFE0tSC4oTkovMtQrTswtLs1L10vOz93ECAzB0/+e9e5gvH3A+hCjAAej Eg+vRHp4mBBrYllxZe4hRlOgDROZpUST84GBnlcSb2hsZmRhamJqbGRuaaYkzqso9TNYSCA9 sSQ1OzW1ILUovqg0J7X4ECMTB6dUA2NI7QL7ZRrfLmXE8T38KLDpYbJpeYTxI/VXfbW3WHPu akzfWvzqu/3UtX7b+Bwd9pyadvGLSnDJrPOzstLWnSjJufjp8tIVt2wlp3EcF5UQj+PNFu1n nebNoMgyb9fLu2tX9C78vq/5/6/Uli2xk3NaUo5O4/Hfcfv3WQ0HuxPCe6a/kX+5uP+PEktx RqKhFnNRcSIA10OVJjwCAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrGLMWRmVeSWpSXmKPExsVy+t9jQd1clYgwg+5uJovrJ7awWXzc8InF 4s2KO+wWP/oDHFg8+rasYvTo793G4vF5k1wAc1QDo01GamJKapFCal5yfkpmXrqtkndwvHO8 qZmBoa6hpYW5kkJeYm6qrZKLT4CuW2YO0DYlhbLEnFKgUEBicbGSvh2mCaEhbroWMI0Rur4h QXA9RgZoIGENY8be0w2MBcvFKho6H7A2MHYKdjFycEgImEh0fDfuYuQEMsUkLtxbz9bFyMUh JDCLUWLG6WMsEM53RolnG9rYQarYBDQlll2eyARiiwjISjQfuswCYjMLFEhM6p0NZgsDDb24 4xKYzSKgKrF850lWEJtXwE3i1MF/bBDb5CROHpvMOoGRewEjwypGidSC5ILipPRcw7zUcr3i xNzi0rx0veT83E2M4DB/JrWD8eAu90OMAhyMSjy8B1LCw4RYE8uKK3MPMUpwMCuJ8DYKRYQJ 8aYkVlalFuXHF5XmpBYfYjQFOmAis5Rocj4wBvNK4g2NTcxNjU0tTSxMzCyVxHkv7PcLExJI TyxJzU5NLUgtgulj4uCUamDMXNt98Zrt32KfjGkLD95u4VK04XPZru68+Ocsk0qNown+t7at mP+6ZSmPuUilWG6OaZvAQsvnPg8SzgZfttzm/9LWq1CQs9+ik8vuqNv+I9fvR4p8yPn965+8 C+M53aVbr7yc9ylplu7HH7fLVj1tfti4dobpDq4FnqfOembdktCIdyquMZBTYinOSDTUYi4q TgQA1iPlo4kCAAA= DLP-Filter: Pass X-MTR: 20000000000000000@CPGS X-CFilter-Loop: Reflected Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org X-Spam-Status: No, score=-6.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, T_RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Amit Khatri Avoid memory leak because of nla_put_failure Signed-off-by: Rahul Jain Signed-off-by: Amit Khatri --- coalesce.c | 7 ++++++- wowlan.c | 33 +++++++++++++++++++++++++++------ 2 files changed, 33 insertions(+), 7 deletions(-) diff --git a/coalesce.c b/coalesce.c index 36dcaef..822da4f 100644 --- a/coalesce.c +++ b/coalesce.c @@ -124,7 +124,8 @@ static int handle_coalesce_enable(struct nl80211_state *state, nla_nest_end(msg, nl_pat); free(mask); free(pat); - + pat = NULL; + mask = NULL; if (!next_pat) break; cur_pat = next_pat; @@ -155,6 +156,10 @@ static int handle_coalesce_enable(struct nl80211_state *state, err = 1; goto close; nla_put_failure: + if (pat) + free(pat); + if (mask) + free(mask); err = -ENOBUFS; close: fclose(f); diff --git a/wowlan.c b/wowlan.c index e0cf316..c674e2c 100644 --- a/wowlan.c +++ b/wowlan.c @@ -89,7 +89,11 @@ static int wowlan_parse_tcp_file(struct nl_msg *msg, const char *fn) if (!pkt) goto close; - NLA_PUT(msg, NL80211_WOWLAN_TCP_DATA_PAYLOAD, len, pkt); + if (nla_put(msg, NL80211_WOWLAN_TCP_DATA_PAYLOAD, len, + pkt) < 0) { + free(pkt); + goto nla_put_failure; + } free(pkt); } else if (strncmp(buf, "data.interval=", 14) == 0) { NLA_PUT_U32(msg, NL80211_WOWLAN_TCP_DATA_INTERVAL, @@ -97,13 +101,24 @@ static int wowlan_parse_tcp_file(struct nl_msg *msg, const char *fn) } else if (strncmp(buf, "wake=", 5) == 0) { unsigned char *pat, *mask; size_t patlen; - if (parse_hex_mask(buf + 5, &pat, &patlen, &mask)) goto close; - NLA_PUT(msg, NL80211_WOWLAN_TCP_WAKE_MASK, - DIV_ROUND_UP(patlen, 8), mask); - NLA_PUT(msg, NL80211_WOWLAN_TCP_WAKE_PAYLOAD, - patlen, pat); + if (nla_put(msg, NL80211_WOWLAN_TCP_WAKE_MASK, + DIV_ROUND_UP(patlen, 8), mask) < 0) { + free(mask); + free(pat); + mask = NULL; + pat = NULL; + goto nla_put_failure; + } + if (nla_put(msg, NL80211_WOWLAN_TCP_WAKE_PAYLOAD, + patlen, pat) < 0){ + free(pat); + free(mask); + pat = NULL; + mask = NULL; + goto nla_put_failure; + } free(mask); free(pat); } else if (strncmp(buf, "data.seq=", 9) == 0) { @@ -300,6 +315,8 @@ static int handle_wowlan_enable(struct nl80211_state *state, nla_nest_end(patterns, pattern); free(mask); free(pat); + pat = NULL; + mask = NULL; break; } argv++; @@ -313,6 +330,10 @@ static int handle_wowlan_enable(struct nl80211_state *state, nla_nest_end(msg, wowlan); err = 0; nla_put_failure: + if (pat) + free(pat); + if (mask) + free(mask); nlmsg_free(patterns); return err; }