2012-11-27 15:47:28

by Helmut Schaa

[permalink] [raw]
Subject: [PATCH] rt2x00: Use addr_mask to catch invalid MAC addresses

This ensures that a user cannot accidentally set up a virtual interface
with a MAC address the rt2800 hw cannot handle.

Reported-by: Petr Stetiar <[email protected]>
Signed-off-by: Helmut Schaa <[email protected]>
---
drivers/net/wireless/rt2x00/rt2800lib.c | 3 +++
1 files changed, 3 insertions(+), 0 deletions(-)

diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c b/drivers/net/wireless/rt2x00/rt2800lib.c
index c0441a7..7f0df12 100644
--- a/drivers/net/wireless/rt2x00/rt2800lib.c
+++ b/drivers/net/wireless/rt2x00/rt2800lib.c
@@ -5108,6 +5108,9 @@ static int rt2800_probe_hw_mode(struct rt2x00_dev *rt2x00dev)
rt2x00_eeprom_addr(rt2x00dev,
EEPROM_MAC_ADDR_0));

+ /* Only the last three bits are variable in rt2800 devices. */
+ rt2x00dev->hw->wiphy->addr_mask[ETH_ALEN - 1] = 0x7;
+
/*
* As rt2800 has a global fallback table we cannot specify
* more then one tx rate per frame but since the hw will
--
1.7.7



2012-11-28 10:08:16

by Ivo Van Doorn

[permalink] [raw]
Subject: Re: [PATCHv2] rt2x00: Use addr_mask to disallow invalid MAC addresses in mutli-bssid mode

Hi,

> Reported-by: Petr Stetiar <[email protected]>
> Signed-off-by: Helmut Schaa <[email protected]>

Acked-by: Ivo van Doorn <[email protected]>

> ---
> drivers/net/wireless/rt2x00/rt2x00dev.c | 7 +++++++
> 1 files changed, 7 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/net/wireless/rt2x00/rt2x00dev.c b/drivers/net/wireless/rt2x00/rt2x00dev.c
> index 69097d1..f9d9754 100644
> --- a/drivers/net/wireless/rt2x00/rt2x00dev.c
> +++ b/drivers/net/wireless/rt2x00/rt2x00dev.c
> @@ -1182,6 +1182,13 @@ int rt2x00lib_probe_dev(struct rt2x00_dev *rt2x00dev)
> rt2x00dev->hw->vif_data_size = sizeof(struct rt2x00_intf);
>
> /*
> + * rt2x00 devices can only use the last n bits of the MAC address
> + * for virtual interfaces.
> + */
> + rt2x00dev->hw->wiphy->addr_mask[ETH_ALEN - 1] =
> + (rt2x00dev->ops->max_ap_intf - 1);
> +
> + /*
> * Determine which operating modes are supported, all modes
> * which require beaconing, depend on the availability of
> * beacon entries.
> --
> 1.7.7
>

2012-11-28 09:28:58

by Helmut Schaa

[permalink] [raw]
Subject: [PATCHv2] rt2x00: Use addr_mask to disallow invalid MAC addresses in mutli-bssid mode

Reported-by: Petr Stetiar <[email protected]>
Signed-off-by: Helmut Schaa <[email protected]>
---
drivers/net/wireless/rt2x00/rt2x00dev.c | 7 +++++++
1 files changed, 7 insertions(+), 0 deletions(-)

diff --git a/drivers/net/wireless/rt2x00/rt2x00dev.c b/drivers/net/wireless/rt2x00/rt2x00dev.c
index 69097d1..f9d9754 100644
--- a/drivers/net/wireless/rt2x00/rt2x00dev.c
+++ b/drivers/net/wireless/rt2x00/rt2x00dev.c
@@ -1182,6 +1182,13 @@ int rt2x00lib_probe_dev(struct rt2x00_dev *rt2x00dev)
rt2x00dev->hw->vif_data_size = sizeof(struct rt2x00_intf);

/*
+ * rt2x00 devices can only use the last n bits of the MAC address
+ * for virtual interfaces.
+ */
+ rt2x00dev->hw->wiphy->addr_mask[ETH_ALEN - 1] =
+ (rt2x00dev->ops->max_ap_intf - 1);
+
+ /*
* Determine which operating modes are supported, all modes
* which require beaconing, depend on the availability of
* beacon entries.
--
1.7.7


2012-11-28 10:06:06

by Gertjan van Wingerde

[permalink] [raw]
Subject: Re: [PATCHv2] rt2x00: Use addr_mask to disallow invalid MAC addresses in mutli-bssid mode

On Wed, Nov 28, 2012 at 10:28 AM, Helmut Schaa
<[email protected]> wrote:
> Reported-by: Petr Stetiar <[email protected]>
> Signed-off-by: Helmut Schaa <[email protected]>

Acked-by: Gertjan van Wingerde <[email protected]>

> ---
> drivers/net/wireless/rt2x00/rt2x00dev.c | 7 +++++++
> 1 files changed, 7 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/net/wireless/rt2x00/rt2x00dev.c b/drivers/net/wireless/rt2x00/rt2x00dev.c
> index 69097d1..f9d9754 100644
> --- a/drivers/net/wireless/rt2x00/rt2x00dev.c
> +++ b/drivers/net/wireless/rt2x00/rt2x00dev.c
> @@ -1182,6 +1182,13 @@ int rt2x00lib_probe_dev(struct rt2x00_dev *rt2x00dev)
> rt2x00dev->hw->vif_data_size = sizeof(struct rt2x00_intf);
>
> /*
> + * rt2x00 devices can only use the last n bits of the MAC address
> + * for virtual interfaces.
> + */
> + rt2x00dev->hw->wiphy->addr_mask[ETH_ALEN - 1] =
> + (rt2x00dev->ops->max_ap_intf - 1);
> +
> + /*
> * Determine which operating modes are supported, all modes
> * which require beaconing, depend on the availability of
> * beacon entries.
> --
> 1.7.7
>



--
---
Gertjan

2012-11-27 17:00:29

by Helmut Schaa

[permalink] [raw]
Subject: Re: [PATCH] rt2x00: Use addr_mask to catch invalid MAC addresses

Hi Ivo,

On Tue, Nov 27, 2012 at 4:56 PM, Ivo Van Doorn <[email protected]> wrote:
> Hi,
>
>> This ensures that a user cannot accidentally set up a virtual interface
>> with a MAC address the rt2800 hw cannot handle.
>>
>> Reported-by: Petr Stetiar <[email protected]>
>> Signed-off-by: Helmut Schaa <[email protected]>
>> ---
>> drivers/net/wireless/rt2x00/rt2800lib.c | 3 +++
>> 1 files changed, 3 insertions(+), 0 deletions(-)
>>
>> diff --git a/drivers/net/wireless/rt2x00/rt2800lib.c
>> b/drivers/net/wireless/rt2x00/rt2800lib.c
>> index c0441a7..7f0df12 100644
>> --- a/drivers/net/wireless/rt2x00/rt2800lib.c
>> +++ b/drivers/net/wireless/rt2x00/rt2800lib.c
>> @@ -5108,6 +5108,9 @@ static int rt2800_probe_hw_mode(struct rt2x00_dev
>> *rt2x00dev)
>> rt2x00_eeprom_addr(rt2x00dev,
>> EEPROM_MAC_ADDR_0));
>>
>> + /* Only the last three bits are variable in rt2800 devices. */
>> + rt2x00dev->hw->wiphy->addr_mask[ETH_ALEN - 1] = 0x7;
>
>
> Shouldn't this be added for rt61pci and rt73usb as well?

I'm not 100% sure if the same is true in rt61pci and rt73usb. Are they
also using an
address mask?

Thanks,
Helmut

2012-11-27 17:09:51

by Helmut Schaa

[permalink] [raw]
Subject: Re: [PATCH] rt2x00: Use addr_mask to catch invalid MAC addresses

On Tue, Nov 27, 2012 at 6:00 PM, Helmut Schaa
<[email protected]> wrote:
>> Shouldn't this be added for rt61pci and rt73usb as well?
>
> I'm not 100% sure if the same is true in rt61pci and rt73usb. Are they
> also using an
> address mask?

Hmm, I think Ivo is right. We should add the same for rt61pci and rt73usb
but they only support the last two bits to be used. Hence an address mask
of 0x3.

I'll send a follow-up.

Helmut