Search Linux Wireless

[PATCH 2/2] wifi: cfg80211: simplify cfg80211_mlme_register_mgmt()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Simplify 'cfg80211_mlme_register_mgmt()' to allocate an instance of
'struct cfg80211_mgmt_registration' only if the latter is really
needed (i.e. when the list of registrations should be updated)
and prefer 'kmalloc()' over 'kzalloc()' since all of the members
are explicitly initialized.

Fixes: 9dba48a6ece7 ("cfg80211: support multicast RX registration")
Signed-off-by: Dmitry Antipov <dmantipov@xxxxxxxxx>
---
 net/wireless/mlme.c | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/net/wireless/mlme.c b/net/wireless/mlme.c
index 4790136758d5..c7d913c76966 100644
--- a/net/wireless/mlme.c
+++ b/net/wireless/mlme.c
@@ -639,7 +639,7 @@ int cfg80211_mlme_register_mgmt(struct wireless_dev *wdev, u32 snd_portid,
 				struct netlink_ext_ack *extack)
 {
 	struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy);
-	struct cfg80211_mgmt_registration *reg, *nreg;
+	struct cfg80211_mgmt_registration *reg;
 	int err = 0;
 	u16 mgmt_type;
 	bool update_multicast = false;
@@ -680,10 +680,6 @@ int cfg80211_mlme_register_mgmt(struct wireless_dev *wdev, u32 snd_portid,
 		return -EINVAL;
 	}
 
-	nreg = kzalloc(sizeof(*reg) + match_len, GFP_KERNEL);
-	if (!nreg)
-		return -ENOMEM;
-
 	spin_lock_bh(&rdev->mgmt_registrations_lock);
 
 	list_for_each_entry(reg, &wdev->mgmt_registrations, list) {
@@ -707,9 +703,14 @@ int cfg80211_mlme_register_mgmt(struct wireless_dev *wdev, u32 snd_portid,
 	if (err)
 		goto out;
 
-	if (update_multicast) {
-		kfree(nreg);
-	} else {
+	if (!update_multicast) {
+		struct cfg80211_mgmt_registration *nreg =
+			kmalloc(sizeof(*reg) + match_len, GFP_KERNEL);
+
+		if (!nreg) {
+			err = -ENOMEM;
+			goto out;
+		}
 		nreg->match_len = match_len;
 		memcpy(nreg->match, match_data, match_len);
 		nreg->nlportid = snd_portid;
@@ -726,7 +727,6 @@ int cfg80211_mlme_register_mgmt(struct wireless_dev *wdev, u32 snd_portid,
 	return 0;
 
  out:
-	kfree(nreg);
 	spin_unlock_bh(&rdev->mgmt_registrations_lock);
 
 	return err;
-- 
2.47.1





[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Wireless Personal Area Network]     [Linux Bluetooth]     [Wireless Regulations]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite Hiking]     [MIPS Linux]     [ARM Linux]     [Linux RAID]

  Powered by Linux