linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jerome Pouiller <Jerome.Pouiller@silabs.com>
To: "devel@driverdev.osuosl.org" <devel@driverdev.osuosl.org>
Cc: "linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Jerome Pouiller <Jerome.Pouiller@silabs.com>,
	kbuild test robot <lkp@intel.com>
Subject: [PATCH 1/7] staging: wfx: simplify memory allocation in wfx_update_filtering()
Date: Tue, 8 Oct 2019 09:42:58 +0000	[thread overview]
Message-ID: <20191008094232.10014-2-Jerome.Pouiller@silabs.com> (raw)
In-Reply-To: <20191008094232.10014-1-Jerome.Pouiller@silabs.com>

From: Jérôme Pouiller <jerome.pouiller@silabs.com>

Original code did not handle case where kmalloc failed. By the way, it
is more convenient to allocate and build HIF message in
hif_set_beacon_filter_table() instead of to ask to caller function to
build it.

Fixes: 40115bbc40e2 ("staging: wfx: implement the rest of mac80211 API")
Reported-by: kbuild test robot <lkp@intel.com>
Signed-off-by: Jérôme Pouiller <jerome.pouiller@silabs.com>
---
 drivers/staging/wfx/hif_tx_mib.h | 19 ++++++++++++++-----
 drivers/staging/wfx/sta.c        | 17 +++++++----------
 2 files changed, 21 insertions(+), 15 deletions(-)

diff --git a/drivers/staging/wfx/hif_tx_mib.h b/drivers/staging/wfx/hif_tx_mib.h
index f6624a403016..167c5dec009f 100644
--- a/drivers/staging/wfx/hif_tx_mib.h
+++ b/drivers/staging/wfx/hif_tx_mib.h
@@ -86,13 +86,22 @@ static inline int hif_set_rx_filter(struct wfx_vif *wvif, bool filter_bssid,
 }
 
 static inline int hif_set_beacon_filter_table(struct wfx_vif *wvif,
-					      struct hif_mib_bcn_filter_table *ft)
+					      int tbl_len,
+					      struct hif_ie_table_entry *tbl)
 {
-	size_t buf_len = struct_size(ft, ie_table, ft->num_of_info_elmts);
+	int ret;
+	struct hif_mib_bcn_filter_table *val;
+	int buf_len = struct_size(val, ie_table, tbl_len);
 
-	cpu_to_le32s(&ft->num_of_info_elmts);
-	return hif_write_mib(wvif->wdev, wvif->id,
-			     HIF_MIB_ID_BEACON_FILTER_TABLE, ft, buf_len);
+	val = kzalloc(buf_len, GFP_KERNEL);
+	if (!val)
+		return -ENOMEM;
+	val->num_of_info_elmts = cpu_to_le32(tbl_len);
+	memcpy(val->ie_table, tbl, tbl_len * sizeof(*tbl));
+	ret = hif_write_mib(wvif->wdev, wvif->id,
+			    HIF_MIB_ID_BEACON_FILTER_TABLE, val, buf_len);
+	kfree(val);
+	return ret;
 }
 
 static inline int hif_beacon_filter_control(struct wfx_vif *wvif,
diff --git a/drivers/staging/wfx/sta.c b/drivers/staging/wfx/sta.c
index 2855d14a709c..12198b8f3685 100644
--- a/drivers/staging/wfx/sta.c
+++ b/drivers/staging/wfx/sta.c
@@ -217,14 +217,13 @@ void wfx_update_filtering(struct wfx_vif *wvif)
 	bool filter_bssid = wvif->filter_bssid;
 	bool fwd_probe_req = wvif->fwd_probe_req;
 	struct hif_mib_bcn_filter_enable bf_ctrl;
-	struct hif_mib_bcn_filter_table *bf_tbl;
-	struct hif_ie_table_entry ie_tbl[] = {
+	struct hif_ie_table_entry filter_ies[] = {
 		{
 			.ie_id        = WLAN_EID_VENDOR_SPECIFIC,
 			.has_changed  = 1,
 			.no_longer    = 1,
 			.has_appeared = 1,
-			.oui         = { 0x50, 0x6F, 0x9A},
+			.oui          = { 0x50, 0x6F, 0x9A },
 		}, {
 			.ie_id        = WLAN_EID_HT_OPERATION,
 			.has_changed  = 1,
@@ -237,36 +236,34 @@ void wfx_update_filtering(struct wfx_vif *wvif)
 			.has_appeared = 1,
 		}
 	};
+	int n_filter_ies;
 
 	if (wvif->state == WFX_STATE_PASSIVE)
 		return;
 
-	bf_tbl = kmalloc(sizeof(struct hif_mib_bcn_filter_table) + sizeof(ie_tbl), GFP_KERNEL);
-	memcpy(bf_tbl->ie_table, ie_tbl, sizeof(ie_tbl));
 	if (wvif->disable_beacon_filter) {
 		bf_ctrl.enable = 0;
 		bf_ctrl.bcn_count = 1;
-		bf_tbl->num_of_info_elmts = 0;
+		n_filter_ies = 0;
 	} else if (!is_sta) {
 		bf_ctrl.enable = HIF_BEACON_FILTER_ENABLE | HIF_BEACON_FILTER_AUTO_ERP;
 		bf_ctrl.bcn_count = 0;
-		bf_tbl->num_of_info_elmts = 2;
+		n_filter_ies = 2;
 	} else {
 		bf_ctrl.enable = HIF_BEACON_FILTER_ENABLE;
 		bf_ctrl.bcn_count = 0;
-		bf_tbl->num_of_info_elmts = 3;
+		n_filter_ies = 3;
 	}
 
 	ret = hif_set_rx_filter(wvif, filter_bssid, fwd_probe_req);
 	if (!ret)
-		ret = hif_set_beacon_filter_table(wvif, bf_tbl);
+		ret = hif_set_beacon_filter_table(wvif, n_filter_ies, filter_ies);
 	if (!ret)
 		ret = hif_beacon_filter_control(wvif, bf_ctrl.enable, bf_ctrl.bcn_count);
 	if (!ret)
 		ret = wfx_set_mcast_filter(wvif, &wvif->mcast_filter);
 	if (ret)
 		dev_err(wvif->wdev->dev, "update filtering failed: %d\n", ret);
-	kfree(bf_tbl);
 }
 
 void wfx_update_filtering_work(struct work_struct *work)
-- 
2.20.1

  reply	other threads:[~2019-10-08  9:43 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-10-08  9:42 [PATCH 0/7] Fix various compilation issues with wfx driver Jerome Pouiller
2019-10-08  9:42 ` Jerome Pouiller [this message]
2019-10-08 11:59   ` [PATCH 1/7] staging: wfx: simplify memory allocation in wfx_update_filtering() Dan Carpenter
2019-10-08  9:42 ` [PATCH 2/7] staging: wfx: remove misused call to cpu_to_le16() Jerome Pouiller
2019-10-08  9:42 ` [PATCH 3/7] staging: wfx: le16_to_cpus() takes a reference as parameter Jerome Pouiller
2019-10-08  9:43 ` [PATCH 4/7] staging: wfx: correctly cast data on big-endian targets Jerome Pouiller
2019-10-08 12:01   ` Dan Carpenter
2019-10-08  9:43 ` [PATCH 5/7] staging: wfx: fix copy_{to,from}_user() usage Jerome Pouiller
2019-10-08  9:43 ` [PATCH 7/7] staging: wfx: avoid namespace contamination Jerome Pouiller
2019-10-08  9:43 ` [PATCH 6/7] staging: wfx: drop calls to BUG_ON() Jerome Pouiller
2019-10-08 12:07   ` Dan Carpenter
2019-10-08 15:10 ` [PATCH 0/7] Fix various compilation issues with wfx driver Greg Kroah-Hartman
2019-10-09 15:13   ` Jerome Pouiller
2019-10-09 18:58     ` Dan Carpenter

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20191008094232.10014-2-Jerome.Pouiller@silabs.com \
    --to=jerome.pouiller@silabs.com \
    --cc=devel@driverdev.osuosl.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lkp@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).