]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/commitdiff
qtnfmac: check for passed channel being NULL in MGMT_TX command
authorIgor Mitsyanko <igor.mitsyanko.os@quantenna.com>
Tue, 19 Dec 2017 11:28:51 +0000 (14:28 +0300)
committerKalle Valo <kvalo@codeaurora.org>
Tue, 9 Jan 2018 12:11:20 +0000 (14:11 +0200)
Parameters passed into .mgmt_tx callback may have a NULL channel in case
userspace wants to send a frame on current channel. Make sure this case
is handled, pass "freq==0" in case channel is not specififed to tell
wlan device to use current channel.

Signed-off-by: Igor Mitsyanko <igor.mitsyanko.os@quantenna.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
drivers/net/wireless/quantenna/qtnfmac/cfg80211.c

index c026882bf9c734b44524a6d7f5eb57f0f27bcfa5..be15d0ed362c0b12709b0437acc1a69668829c4a 100644 (file)
@@ -381,6 +381,7 @@ qtnf_mgmt_tx(struct wiphy *wiphy, struct wireless_dev *wdev,
        const struct ieee80211_mgmt *mgmt_frame = (void *)params->buf;
        u32 short_cookie = prandom_u32();
        u16 flags = 0;
+       u16 freq;
 
        *cookie = short_cookie;
 
@@ -393,13 +394,21 @@ qtnf_mgmt_tx(struct wiphy *wiphy, struct wireless_dev *wdev,
        if (params->dont_wait_for_ack)
                flags |= QLINK_MGMT_FRAME_TX_FLAG_ACK_NOWAIT;
 
+       /* If channel is not specified, pass "freq = 0" to tell device
+        * firmware to use current channel.
+        */
+       if (params->chan)
+               freq = params->chan->center_freq;
+       else
+               freq = 0;
+
        pr_debug("%s freq:%u; FC:%.4X; DA:%pM; len:%zu; C:%.8X; FL:%.4X\n",
-                wdev->netdev->name, params->chan->center_freq,
+                wdev->netdev->name, freq,
                 le16_to_cpu(mgmt_frame->frame_control), mgmt_frame->da,
                 params->len, short_cookie, flags);
 
        return qtnf_cmd_send_mgmt_frame(vif, short_cookie, flags,
-                                       params->chan->center_freq,
+                                       freq,
                                        params->buf, params->len);
 }