From: Simon Wunderlich <simon.wunderlich@s2003.tu-chemnitz.de>
To: Felix Fietkau <nbd@openwrt.org>
Cc: linux-wireless@vger.kernel.org, linville@tuxdriver.com,
mcgrof@qca.qualcomm.com
Subject: Re: [PATCH 2/2] ath9k: always set common->macaddr to the MAC adress of a virtual interface
Date: Wed, 17 Apr 2013 18:39:22 +0200 [thread overview]
Message-ID: <20130417163922.GA22804@pandem0nium> (raw)
In-Reply-To: <1366109517-64645-2-git-send-email-nbd@openwrt.org>
[-- Attachment #1: Type: text/plain, Size: 3267 bytes --]
On Tue, Apr 16, 2013 at 12:51:57PM +0200, Felix Fietkau wrote:
> In some cases it can be useful to change the MAC address of a virtual
> interface to something that's completely different from the EEPROM
> stored MAC address. In this case it is a bad idea to use the EEPROM MAC
> address for calculating the BSSID mask, as that would make it too wide.
>
> In one case a few devices have been observed to send ACKs for many
> packets on the channel not directed at them, which results in a neat
> Denial of Service attack on the channel.
This was really giving me a hard time. Thanks a lot for finding the cause
and fixing that. :)
Cheers,
Simon
>
> Signed-off-by: Felix Fietkau <nbd@openwrt.org>
> ---
> drivers/net/wireless/ath/ath9k/ath9k.h | 7 +++----
> drivers/net/wireless/ath/ath9k/main.c | 9 +++++++--
> 2 files changed, 10 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/net/wireless/ath/ath9k/ath9k.h b/drivers/net/wireless/ath/ath9k/ath9k.h
> index 86d3572..1915f12 100644
> --- a/drivers/net/wireless/ath/ath9k/ath9k.h
> +++ b/drivers/net/wireless/ath/ath9k/ath9k.h
> @@ -658,11 +658,10 @@ enum sc_op_flags {
> struct ath_rate_table;
>
> struct ath9k_vif_iter_data {
> - const u8 *hw_macaddr; /* phy's hardware address, set
> - * before starting iteration for
> - * valid bssid mask.
> - */
> + u8 hw_macaddr[ETH_ALEN]; /* address of the first vif */
> u8 mask[ETH_ALEN]; /* bssid mask */
> + bool has_hw_macaddr;
> +
> int naps; /* number of AP vifs */
> int nmeshes; /* number of mesh vifs */
> int nstations; /* number of station vifs */
> diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c
> index a383483..6963862 100644
> --- a/drivers/net/wireless/ath/ath9k/main.c
> +++ b/drivers/net/wireless/ath/ath9k/main.c
> @@ -839,10 +839,14 @@ static void ath9k_vif_iter(void *data, u8 *mac, struct ieee80211_vif *vif)
> struct ath9k_vif_iter_data *iter_data = data;
> int i;
>
> - if (iter_data->hw_macaddr)
> + if (iter_data->has_hw_macaddr) {
> for (i = 0; i < ETH_ALEN; i++)
> iter_data->mask[i] &=
> ~(iter_data->hw_macaddr[i] ^ mac[i]);
> + } else {
> + memcpy(iter_data->hw_macaddr, mac, ETH_ALEN);
> + iter_data->has_hw_macaddr = true;
> + }
>
> switch (vif->type) {
> case NL80211_IFTYPE_AP:
> @@ -891,7 +895,6 @@ void ath9k_calculate_iter_data(struct ieee80211_hw *hw,
> * together with the BSSID mask when matching addresses.
> */
> memset(iter_data, 0, sizeof(*iter_data));
> - iter_data->hw_macaddr = common->macaddr;
> memset(&iter_data->mask, 0xff, ETH_ALEN);
>
> if (vif)
> @@ -901,6 +904,8 @@ void ath9k_calculate_iter_data(struct ieee80211_hw *hw,
> ieee80211_iterate_active_interfaces_atomic(
> sc->hw, IEEE80211_IFACE_ITER_RESUME_ALL,
> ath9k_vif_iter, iter_data);
> +
> + memcpy(common->macaddr, iter_data->hw_macaddr, ETH_ALEN);
> }
>
> /* Called with sc->mutex held. */
> --
> 1.8.0.2
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 198 bytes --]
prev parent reply other threads:[~2013-04-17 16:39 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-04-16 10:51 [PATCH 1/2] ath: update hardware mac address with bssid mask Felix Fietkau
2013-04-16 10:51 ` [PATCH 2/2] ath9k: always set common->macaddr to the MAC adress of a virtual interface Felix Fietkau
2013-04-17 16:39 ` Simon Wunderlich [this message]
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=20130417163922.GA22804@pandem0nium \
--to=simon.wunderlich@s2003.tu-chemnitz.de \
--cc=linux-wireless@vger.kernel.org \
--cc=linville@tuxdriver.com \
--cc=mcgrof@qca.qualcomm.com \
--cc=nbd@openwrt.org \
/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