Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7576107c authored by Johannes Berg's avatar Johannes Berg Committed by Alexei Avshalom Lazar
Browse files

cfg80211: initialize on-stack chandefs



In a few places we don't properly initialize on-stack chandefs,
resulting in EDMG data to be non-zero, which broke things.

Additionally, in a few places we rely on the driver to init the
data completely, but perhaps we shouldn't as non-EDMG drivers
may not initialize the EDMG data, also initialize it there.

Change-Id: I5c4e6e54df272cfa65b90d37f29ace231ff17645
Cc: stable@vger.kernel.org
Fixes: 2a38075cd0be ("nl80211: Add support for EDMG channels")
Reported-by: default avatarDmitry Osipenko <digetx@gmail.com>
Tested-by: default avatarDmitry Osipenko <digetx@gmail.com>
Link: https://lore.kernel.org/r/1569239475-I2dcce394ecf873376c386a78f31c2ec8b538fa25@changeid


Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
Git-commit: f43e5210c739fe76a4b0ed851559d6902f20ceb1
Git-repo: git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git


Signed-off-by: default avatarAlexei Avshalom Lazar <ailizaro@codeaurora.org>
parent eca47d45
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -2311,6 +2311,8 @@ static int nl80211_parse_chandef(struct cfg80211_registered_device *rdev,

	control_freq = nla_get_u32(info->attrs[NL80211_ATTR_WIPHY_FREQ]);

	memset(chandef, 0, sizeof(*chandef));

	chandef->chan = ieee80211_get_channel(&rdev->wiphy, control_freq);
	chandef->width = NL80211_CHAN_WIDTH_20_NOHT;
	chandef->center_freq1 = control_freq;
@@ -2843,7 +2845,7 @@ static int nl80211_send_iface(struct sk_buff *msg, u32 portid, u32 seq, int flag

	if (rdev->ops->get_channel) {
		int ret;
		struct cfg80211_chan_def chandef;
		struct cfg80211_chan_def chandef = {};

		ret = rdev_get_channel(rdev, wdev, &chandef);
		if (ret == 0) {
+1 −1
Original line number Diff line number Diff line
@@ -2137,7 +2137,7 @@ static void reg_call_notifier(struct wiphy *wiphy,

static bool reg_wdev_chan_valid(struct wiphy *wiphy, struct wireless_dev *wdev)
{
	struct cfg80211_chan_def chandef;
	struct cfg80211_chan_def chandef = {};
	struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy);
	enum nl80211_iftype iftype;

+1 −1
Original line number Diff line number Diff line
@@ -800,7 +800,7 @@ static int cfg80211_wext_giwfreq(struct net_device *dev,
{
	struct wireless_dev *wdev = dev->ieee80211_ptr;
	struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy);
	struct cfg80211_chan_def chandef;
	struct cfg80211_chan_def chandef = {};
	int ret;

	switch (wdev->iftype) {