All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/2] etherdevice: add is_zero_ether_addr_unaligned()
@ 2016-08-13  2:59 Petri Gynther
  2016-08-13  3:00 ` [PATCH 2/2] mwifiex: fix unaligned read in mwifiex_config_scan() Petri Gynther
  2016-08-13  4:11 ` [PATCH 1/2] etherdevice: add is_zero_ether_addr_unaligned() Joe Perches
  0 siblings, 2 replies; 9+ messages in thread
From: Petri Gynther @ 2016-08-13  2:59 UTC (permalink / raw)
  To: linux-wireless; +Cc: kvalo, davem, joe, akarwar, Petri Gynther

Add a generic routine to test if possibly unaligned to u16
Ethernet address is a zero address.

If CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS is set, use
slightly faster generic routine is_zero_ether_addr(),
otherwise use byte accesses.

This is v2 of the original patch:
[PATCH] Modify is_zero_ether_addr() to handle byte-aligned addresses

Per Joe's suggestion -- instead of modifying is_zero_ether_addr() --
add is_zero_ether_addr_unaligned() and use it where needed.

Cc: Kalle Valo <kvalo@codeaurora.org>
Cc: David S. Miller <davem@davemloft.net>
Cc: Joe Perches <joe@perches.com>
Cc: Amitkumar Karwar <akarwar@marvell.com>
Signed-off-by: Petri Gynther <pgynther@google.com>
---
 include/linux/etherdevice.h | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/include/linux/etherdevice.h b/include/linux/etherdevice.h
index 37ff4a6..f609691 100644
--- a/include/linux/etherdevice.h
+++ b/include/linux/etherdevice.h
@@ -105,6 +105,21 @@ static inline bool is_zero_ether_addr(const u8 *addr)
 }
 
 /**
+ * is_zero_ether_addr_unaligned - Determine if given Ethernet address is all zeros.
+ * @addr: Pointer to a six-byte array containing the Ethernet address
+ *
+ * Return true if the address is all zeroes.
+ */
+static inline bool is_zero_ether_addr_unaligned(const u8 *addr)
+{
+#if defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS)
+	return is_zero_ether_addr(addr);
+#else
+	return (addr[0] | addr[1] | addr[2] | addr[3] | addr[4] | addr[5]) == 0;
+#endif
+}
+
+/**
  * is_multicast_ether_addr - Determine if the Ethernet address is a multicast.
  * @addr: Pointer to a six-byte array containing the Ethernet address
  *
-- 
2.8.0.rc3.226.g39d4020


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 2/2] mwifiex: fix unaligned read in mwifiex_config_scan()
  2016-08-13  2:59 [PATCH 1/2] etherdevice: add is_zero_ether_addr_unaligned() Petri Gynther
@ 2016-08-13  3:00 ` Petri Gynther
  2016-08-16 17:47   ` Petri Gynther
  2016-09-26 11:19   ` [2/2] " Kalle Valo
  2016-08-13  4:11 ` [PATCH 1/2] etherdevice: add is_zero_ether_addr_unaligned() Joe Perches
  1 sibling, 2 replies; 9+ messages in thread
From: Petri Gynther @ 2016-08-13  3:00 UTC (permalink / raw)
  To: linux-wireless; +Cc: kvalo, davem, joe, akarwar, Petri Gynther

$ iwconfig mlan0 essid MySSID
[   36.930000] Path: /sbin/iwconfig
[   36.930000] CPU: 0 PID: 203 Comm: iwconfig Not tainted 4.7.0 #2
[   36.940000] task: 866f83a0 ti: 866a6000 task.ti: 866a6000
[   36.940000]
[ECR   ]: 0x00230400 => Misaligned r/w from 0x8677f403
[   36.960000] [EFA   ]: 0x8677f403
[   36.960000] [BLINK ]: mwifiex_scan_networks+0x17a/0x198c [mwifiex]
[   36.960000] [ERET  ]: mwifiex_scan_networks+0x18a/0x198c [mwifiex]
[   36.980000] [STAT32]: 0x00000206 : K         E2 E1
[   36.980000] BTA: 0x700736e2   SP: 0x866a7d0c  FP: 0x5faddc84
[   37.000000] LPS: 0x806a37ec  LPE: 0x806a37fa LPC: 0x00000000
[   37.000000] r00: 0x8677f401  r01: 0x8668aa08 r02: 0x00000001
r03: 0x00000000 r04: 0x8668b600 r05: 0x8677f406
r06: 0x8702b600 r07: 0x00000000 r08: 0x8702b600
r09: 0x00000000 r10: 0x870b3b00 r11: 0x00000000
r12: 0x00000000
[   37.040000]
[   37.040000] Stack Trace:
[   37.040000]   mwifiex_scan_networks+0x18a/0x198c [mwifiex]

Root cause:
mwifiex driver calls is_zero_ether_addr() against byte-aligned address:

drivers/net/wireless/marvell/mwifiex/fw.h:
struct mwifiex_scan_cmd_config {
        /*
         *  BSS mode to be sent in the firmware command
         */
        u8 bss_mode;

        /* Specific BSSID used to filter scan results in the firmware */
        u8 specific_bssid[ETH_ALEN];

        ...
} __packed;

drivers/net/wireless/marvell/mwifiex/scan.c:
mwifiex_config_scan(..., struct mwifiex_scan_cmd_config *scan_cfg_out, ...)
        ...
        if (adapter->ext_scan &&
            !is_zero_ether_addr(scan_cfg_out->specific_bssid)) {
            ...
        }

Since firmware-related struct mwifiex_scan_cmd_config cannot be changed,
we need to use the new function is_zero_ether_addr_unaligned() here.

This is v2 of the original patch:
[PATCH] Modify is_zero_ether_addr() to handle byte-aligned addresses

Per Joe's suggestion -- instead of modifying is_zero_ether_addr() --
add is_zero_ether_addr_unaligned() and use it where needed.

Cc: Kalle Valo <kvalo@codeaurora.org>
Cc: David S. Miller <davem@davemloft.net>
Cc: Joe Perches <joe@perches.com>
Cc: Amitkumar Karwar <akarwar@marvell.com>
Signed-off-by: Petri Gynther <pgynther@google.com>
---
 drivers/net/wireless/marvell/mwifiex/scan.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/net/wireless/marvell/mwifiex/scan.c b/drivers/net/wireless/marvell/mwifiex/scan.c
index bc5e52c..d648c88 100644
--- a/drivers/net/wireless/marvell/mwifiex/scan.c
+++ b/drivers/net/wireless/marvell/mwifiex/scan.c
@@ -883,7 +883,8 @@ mwifiex_config_scan(struct mwifiex_private *priv,
 		       sizeof(scan_cfg_out->specific_bssid));
 
 		if (adapter->ext_scan &&
-		    !is_zero_ether_addr(scan_cfg_out->specific_bssid)) {
+		    !is_zero_ether_addr_unaligned(
+				scan_cfg_out->specific_bssid)) {
 			bssid_tlv =
 				(struct mwifiex_ie_types_bssid_list *)tlv_pos;
 			bssid_tlv->header.type = cpu_to_le16(TLV_TYPE_BSSID);
-- 
2.8.0.rc3.226.g39d4020


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH 1/2] etherdevice: add is_zero_ether_addr_unaligned()
  2016-08-13  2:59 [PATCH 1/2] etherdevice: add is_zero_ether_addr_unaligned() Petri Gynther
  2016-08-13  3:00 ` [PATCH 2/2] mwifiex: fix unaligned read in mwifiex_config_scan() Petri Gynther
@ 2016-08-13  4:11 ` Joe Perches
  2016-08-13  4:40   ` Petri Gynther
  1 sibling, 1 reply; 9+ messages in thread
From: Joe Perches @ 2016-08-13  4:11 UTC (permalink / raw)
  To: Petri Gynther, linux-wireless; +Cc: kvalo, davem, akarwar

On Fri, 2016-08-12 at 19:59 -0700, Petri Gynther wrote:
> Add a generic routine to test if possibly unaligned to u16
> Ethernet address is a zero address.
[]
> diff --git a/include/linux/etherdevice.h b/include/linux/etherdevice.h
[]
> +static inline bool is_zero_ether_addr_unaligned(const u8 *addr)
> +{
> +#if defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS)
> +	return is_zero_ether_addr(addr);
> +#else
> +	return (addr[0] | addr[1] | addr[2] | addr[3] | addr[4] | addr[5]) == 0;
> +#endif

Because the return is bool, the == 0 is unnecessary.


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 1/2] etherdevice: add is_zero_ether_addr_unaligned()
  2016-08-13  4:11 ` [PATCH 1/2] etherdevice: add is_zero_ether_addr_unaligned() Joe Perches
@ 2016-08-13  4:40   ` Petri Gynther
  2016-08-13  4:59     ` Joe Perches
  0 siblings, 1 reply; 9+ messages in thread
From: Petri Gynther @ 2016-08-13  4:40 UTC (permalink / raw)
  To: Joe Perches; +Cc: linux-wireless, kvalo, David Miller, Amitkumar Karwar

On Fri, Aug 12, 2016 at 9:11 PM, Joe Perches <joe@perches.com> wrote:
> On Fri, 2016-08-12 at 19:59 -0700, Petri Gynther wrote:
>> Add a generic routine to test if possibly unaligned to u16
>> Ethernet address is a zero address.
> []
>> diff --git a/include/linux/etherdevice.h b/include/linux/etherdevice.h
> []
>> +static inline bool is_zero_ether_addr_unaligned(const u8 *addr)
>> +{
>> +#if defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS)
>> +     return is_zero_ether_addr(addr);
>> +#else
>> +     return (addr[0] | addr[1] | addr[2] | addr[3] | addr[4] | addr[5]) == 0;
>> +#endif
>
> Because the return is bool, the == 0 is unnecessary.
>

But, we need to return true (1) when the bitwise OR result is zero.
Same logic as in is_zero_ether_addr().

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 1/2] etherdevice: add is_zero_ether_addr_unaligned()
  2016-08-13  4:40   ` Petri Gynther
@ 2016-08-13  4:59     ` Joe Perches
  0 siblings, 0 replies; 9+ messages in thread
From: Joe Perches @ 2016-08-13  4:59 UTC (permalink / raw)
  To: Petri Gynther; +Cc: linux-wireless, kvalo, David Miller, Amitkumar Karwar

On Fri, 2016-08-12 at 21:40 -0700, Petri Gynther wrote:
> But, we need to return true (1) when the bitwise OR result is zero.
> Same logic as in is_zero_ether_addr().

right.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 2/2] mwifiex: fix unaligned read in mwifiex_config_scan()
  2016-08-13  3:00 ` [PATCH 2/2] mwifiex: fix unaligned read in mwifiex_config_scan() Petri Gynther
@ 2016-08-16 17:47   ` Petri Gynther
  2016-09-08 16:10     ` Amitkumar Karwar
  2016-09-26 11:19   ` [2/2] " Kalle Valo
  1 sibling, 1 reply; 9+ messages in thread
From: Petri Gynther @ 2016-08-16 17:47 UTC (permalink / raw)
  To: linux-wireless
  Cc: kvalo, David Miller, Joe Perches, Amitkumar Karwar, Petri Gynther

On Fri, Aug 12, 2016 at 8:00 PM, Petri Gynther <pgynther@google.com> wrote:
> $ iwconfig mlan0 essid MySSID
> [   36.930000] Path: /sbin/iwconfig
> [   36.930000] CPU: 0 PID: 203 Comm: iwconfig Not tainted 4.7.0 #2
> [   36.940000] task: 866f83a0 ti: 866a6000 task.ti: 866a6000
> [   36.940000]
> [ECR   ]: 0x00230400 => Misaligned r/w from 0x8677f403
> [   36.960000] [EFA   ]: 0x8677f403
> [   36.960000] [BLINK ]: mwifiex_scan_networks+0x17a/0x198c [mwifiex]
> [   36.960000] [ERET  ]: mwifiex_scan_networks+0x18a/0x198c [mwifiex]
> [   36.980000] [STAT32]: 0x00000206 : K         E2 E1
> [   36.980000] BTA: 0x700736e2   SP: 0x866a7d0c  FP: 0x5faddc84
> [   37.000000] LPS: 0x806a37ec  LPE: 0x806a37fa LPC: 0x00000000
> [   37.000000] r00: 0x8677f401  r01: 0x8668aa08 r02: 0x00000001
> r03: 0x00000000 r04: 0x8668b600 r05: 0x8677f406
> r06: 0x8702b600 r07: 0x00000000 r08: 0x8702b600
> r09: 0x00000000 r10: 0x870b3b00 r11: 0x00000000
> r12: 0x00000000
> [   37.040000]
> [   37.040000] Stack Trace:
> [   37.040000]   mwifiex_scan_networks+0x18a/0x198c [mwifiex]
>
> Root cause:
> mwifiex driver calls is_zero_ether_addr() against byte-aligned address:
>
> drivers/net/wireless/marvell/mwifiex/fw.h:
> struct mwifiex_scan_cmd_config {
>         /*
>          *  BSS mode to be sent in the firmware command
>          */
>         u8 bss_mode;
>
>         /* Specific BSSID used to filter scan results in the firmware */
>         u8 specific_bssid[ETH_ALEN];
>
>         ...
> } __packed;
>
> drivers/net/wireless/marvell/mwifiex/scan.c:
> mwifiex_config_scan(..., struct mwifiex_scan_cmd_config *scan_cfg_out, ...)
>         ...
>         if (adapter->ext_scan &&
>             !is_zero_ether_addr(scan_cfg_out->specific_bssid)) {
>             ...
>         }
>
> Since firmware-related struct mwifiex_scan_cmd_config cannot be changed,
> we need to use the new function is_zero_ether_addr_unaligned() here.
>
> This is v2 of the original patch:
> [PATCH] Modify is_zero_ether_addr() to handle byte-aligned addresses
>
> Per Joe's suggestion -- instead of modifying is_zero_ether_addr() --
> add is_zero_ether_addr_unaligned() and use it where needed.
>
> Cc: Kalle Valo <kvalo@codeaurora.org>
> Cc: David S. Miller <davem@davemloft.net>
> Cc: Joe Perches <joe@perches.com>
> Cc: Amitkumar Karwar <akarwar@marvell.com>
> Signed-off-by: Petri Gynther <pgynther@google.com>
> ---
>  drivers/net/wireless/marvell/mwifiex/scan.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/net/wireless/marvell/mwifiex/scan.c b/drivers/net/wireless/marvell/mwifiex/scan.c
> index bc5e52c..d648c88 100644
> --- a/drivers/net/wireless/marvell/mwifiex/scan.c
> +++ b/drivers/net/wireless/marvell/mwifiex/scan.c
> @@ -883,7 +883,8 @@ mwifiex_config_scan(struct mwifiex_private *priv,
>                        sizeof(scan_cfg_out->specific_bssid));
>
>                 if (adapter->ext_scan &&
> -                   !is_zero_ether_addr(scan_cfg_out->specific_bssid)) {
> +                   !is_zero_ether_addr_unaligned(
> +                               scan_cfg_out->specific_bssid)) {

Any comments? Is this approach of adding
is_zero_ether_addr_unaligned() fine? We already have similar routine
ether_addr_equal_unaligned().

I don't see much benefit making a local, aligned copy here. It would
have to use memcpy w/ byte operations anyways and then still run
is_zero_ether_addr().

Amitkumar -- Is it possible to modify struct mwifiex_scan_cmd_config
{} and align specific_bssid field to u16 boundary?

>                         bssid_tlv =
>                                 (struct mwifiex_ie_types_bssid_list *)tlv_pos;
>                         bssid_tlv->header.type = cpu_to_le16(TLV_TYPE_BSSID);
> --
> 2.8.0.rc3.226.g39d4020
>

^ permalink raw reply	[flat|nested] 9+ messages in thread

* RE: [PATCH 2/2] mwifiex: fix unaligned read in mwifiex_config_scan()
  2016-08-16 17:47   ` Petri Gynther
@ 2016-09-08 16:10     ` Amitkumar Karwar
  2016-09-08 18:01       ` Kalle Valo
  0 siblings, 1 reply; 9+ messages in thread
From: Amitkumar Karwar @ 2016-09-08 16:10 UTC (permalink / raw)
  To: Petri Gynther, linux-wireless; +Cc: kvalo, David Miller, Joe Perches

SGkgUGV0cmksDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogUGV0cmkg
R3ludGhlciBbbWFpbHRvOnBneW50aGVyQGdvb2dsZS5jb21dDQo+IFNlbnQ6IFR1ZXNkYXksIEF1
Z3VzdCAxNiwgMjAxNiAxMToxNyBQTQ0KPiBUbzogbGludXgtd2lyZWxlc3NAdmdlci5rZXJuZWwu
b3JnDQo+IENjOiBrdmFsb0Bjb2RlYXVyb3JhLm9yZzsgRGF2aWQgTWlsbGVyOyBKb2UgUGVyY2hl
czsgQW1pdGt1bWFyIEthcndhcjsNCj4gUGV0cmkgR3ludGhlcg0KPiBTdWJqZWN0OiBSZTogW1BB
VENIIDIvMl0gbXdpZmlleDogZml4IHVuYWxpZ25lZCByZWFkIGluDQo+IG13aWZpZXhfY29uZmln
X3NjYW4oKQ0KPiANCj4gT24gRnJpLCBBdWcgMTIsIDIwMTYgYXQgODowMCBQTSwgUGV0cmkgR3lu
dGhlciA8cGd5bnRoZXJAZ29vZ2xlLmNvbT4NCj4gd3JvdGU6DQo+ID4gJCBpd2NvbmZpZyBtbGFu
MCBlc3NpZCBNeVNTSUQNCj4gPiBbICAgMzYuOTMwMDAwXSBQYXRoOiAvc2Jpbi9pd2NvbmZpZw0K
PiA+IFsgICAzNi45MzAwMDBdIENQVTogMCBQSUQ6IDIwMyBDb21tOiBpd2NvbmZpZyBOb3QgdGFp
bnRlZCA0LjcuMCAjMg0KPiA+IFsgICAzNi45NDAwMDBdIHRhc2s6IDg2NmY4M2EwIHRpOiA4NjZh
NjAwMCB0YXNrLnRpOiA4NjZhNjAwMA0KPiA+IFsgICAzNi45NDAwMDBdDQo+ID4gW0VDUiAgIF06
IDB4MDAyMzA0MDAgPT4gTWlzYWxpZ25lZCByL3cgZnJvbSAweDg2NzdmNDAzDQo+ID4gWyAgIDM2
Ljk2MDAwMF0gW0VGQSAgIF06IDB4ODY3N2Y0MDMNCj4gPiBbICAgMzYuOTYwMDAwXSBbQkxJTksg
XTogbXdpZmlleF9zY2FuX25ldHdvcmtzKzB4MTdhLzB4MTk4YyBbbXdpZmlleF0NCj4gPiBbICAg
MzYuOTYwMDAwXSBbRVJFVCAgXTogbXdpZmlleF9zY2FuX25ldHdvcmtzKzB4MThhLzB4MTk4YyBb
bXdpZmlleF0NCj4gPiBbICAgMzYuOTgwMDAwXSBbU1RBVDMyXTogMHgwMDAwMDIwNiA6IEsgICAg
ICAgICBFMiBFMQ0KPiA+IFsgICAzNi45ODAwMDBdIEJUQTogMHg3MDA3MzZlMiAgIFNQOiAweDg2
NmE3ZDBjICBGUDogMHg1ZmFkZGM4NA0KPiA+IFsgICAzNy4wMDAwMDBdIExQUzogMHg4MDZhMzdl
YyAgTFBFOiAweDgwNmEzN2ZhIExQQzogMHgwMDAwMDAwMA0KPiA+IFsgICAzNy4wMDAwMDBdIHIw
MDogMHg4Njc3ZjQwMSAgcjAxOiAweDg2NjhhYTA4IHIwMjogMHgwMDAwMDAwMQ0KPiA+IHIwMzog
MHgwMDAwMDAwMCByMDQ6IDB4ODY2OGI2MDAgcjA1OiAweDg2NzdmNDA2DQo+ID4gcjA2OiAweDg3
MDJiNjAwIHIwNzogMHgwMDAwMDAwMCByMDg6IDB4ODcwMmI2MDANCj4gPiByMDk6IDB4MDAwMDAw
MDAgcjEwOiAweDg3MGIzYjAwIHIxMTogMHgwMDAwMDAwMA0KPiA+IHIxMjogMHgwMDAwMDAwMA0K
PiA+IFsgICAzNy4wNDAwMDBdDQo+ID4gWyAgIDM3LjA0MDAwMF0gU3RhY2sgVHJhY2U6DQo+ID4g
WyAgIDM3LjA0MDAwMF0gICBtd2lmaWV4X3NjYW5fbmV0d29ya3MrMHgxOGEvMHgxOThjIFttd2lm
aWV4XQ0KPiA+DQo+ID4gUm9vdCBjYXVzZToNCj4gPiBtd2lmaWV4IGRyaXZlciBjYWxscyBpc196
ZXJvX2V0aGVyX2FkZHIoKSBhZ2FpbnN0IGJ5dGUtYWxpZ25lZA0KPiBhZGRyZXNzOg0KPiA+DQo+
ID4gZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L2Z3Lmg6DQo+ID4gc3RydWN0
IG13aWZpZXhfc2Nhbl9jbWRfY29uZmlnIHsNCj4gPiAgICAgICAgIC8qDQo+ID4gICAgICAgICAg
KiAgQlNTIG1vZGUgdG8gYmUgc2VudCBpbiB0aGUgZmlybXdhcmUgY29tbWFuZA0KPiA+ICAgICAg
ICAgICovDQo+ID4gICAgICAgICB1OCBic3NfbW9kZTsNCj4gPg0KPiA+ICAgICAgICAgLyogU3Bl
Y2lmaWMgQlNTSUQgdXNlZCB0byBmaWx0ZXIgc2NhbiByZXN1bHRzIGluIHRoZSBmaXJtd2FyZQ0K
PiAqLw0KPiA+ICAgICAgICAgdTggc3BlY2lmaWNfYnNzaWRbRVRIX0FMRU5dOw0KPiA+DQo+ID4g
ICAgICAgICAuLi4NCj4gPiB9IF9fcGFja2VkOw0KPiA+DQo+ID4gZHJpdmVycy9uZXQvd2lyZWxl
c3MvbWFydmVsbC9td2lmaWV4L3NjYW4uYzoNCj4gPiBtd2lmaWV4X2NvbmZpZ19zY2FuKC4uLiwg
c3RydWN0IG13aWZpZXhfc2Nhbl9jbWRfY29uZmlnICpzY2FuX2NmZ19vdXQsDQo+IC4uLikNCj4g
PiAgICAgICAgIC4uLg0KPiA+ICAgICAgICAgaWYgKGFkYXB0ZXItPmV4dF9zY2FuICYmDQo+ID4g
ICAgICAgICAgICAgIWlzX3plcm9fZXRoZXJfYWRkcihzY2FuX2NmZ19vdXQtPnNwZWNpZmljX2Jz
c2lkKSkgew0KPiA+ICAgICAgICAgICAgIC4uLg0KPiA+ICAgICAgICAgfQ0KPiA+DQo+ID4gU2lu
Y2UgZmlybXdhcmUtcmVsYXRlZCBzdHJ1Y3QgbXdpZmlleF9zY2FuX2NtZF9jb25maWcgY2Fubm90
IGJlDQo+ID4gY2hhbmdlZCwgd2UgbmVlZCB0byB1c2UgdGhlIG5ldyBmdW5jdGlvbg0KPiBpc196
ZXJvX2V0aGVyX2FkZHJfdW5hbGlnbmVkKCkgaGVyZS4NCj4gPg0KPiA+IFRoaXMgaXMgdjIgb2Yg
dGhlIG9yaWdpbmFsIHBhdGNoOg0KPiA+IFtQQVRDSF0gTW9kaWZ5IGlzX3plcm9fZXRoZXJfYWRk
cigpIHRvIGhhbmRsZSBieXRlLWFsaWduZWQgYWRkcmVzc2VzDQo+ID4NCj4gPiBQZXIgSm9lJ3Mg
c3VnZ2VzdGlvbiAtLSBpbnN0ZWFkIG9mIG1vZGlmeWluZyBpc196ZXJvX2V0aGVyX2FkZHIoKSAt
LQ0KPiA+IGFkZCBpc196ZXJvX2V0aGVyX2FkZHJfdW5hbGlnbmVkKCkgYW5kIHVzZSBpdCB3aGVy
ZSBuZWVkZWQuDQo+ID4NCj4gPiBDYzogS2FsbGUgVmFsbyA8a3ZhbG9AY29kZWF1cm9yYS5vcmc+
DQo+ID4gQ2M6IERhdmlkIFMuIE1pbGxlciA8ZGF2ZW1AZGF2ZW1sb2Z0Lm5ldD4NCj4gPiBDYzog
Sm9lIFBlcmNoZXMgPGpvZUBwZXJjaGVzLmNvbT4NCj4gPiBDYzogQW1pdGt1bWFyIEthcndhciA8
YWthcndhckBtYXJ2ZWxsLmNvbT4NCj4gPiBTaWduZWQtb2ZmLWJ5OiBQZXRyaSBHeW50aGVyIDxw
Z3ludGhlckBnb29nbGUuY29tPg0KPiA+IC0tLQ0KPiA+ICBkcml2ZXJzL25ldC93aXJlbGVzcy9t
YXJ2ZWxsL213aWZpZXgvc2Nhbi5jIHwgMyArKy0NCj4gPiAgMSBmaWxlIGNoYW5nZWQsIDIgaW5z
ZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQ0KPiA+DQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv
bmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmMNCj4gPiBiL2RyaXZlcnMvbmV0L3dp
cmVsZXNzL21hcnZlbGwvbXdpZmlleC9zY2FuLmMNCj4gPiBpbmRleCBiYzVlNTJjLi5kNjQ4Yzg4
IDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9z
Y2FuLmMNCj4gPiArKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvc2Nh
bi5jDQo+ID4gQEAgLTg4Myw3ICs4ODMsOCBAQCBtd2lmaWV4X2NvbmZpZ19zY2FuKHN0cnVjdCBt
d2lmaWV4X3ByaXZhdGUgKnByaXYsDQo+ID4gICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yo
c2Nhbl9jZmdfb3V0LT5zcGVjaWZpY19ic3NpZCkpOw0KPiA+DQo+ID4gICAgICAgICAgICAgICAg
IGlmIChhZGFwdGVyLT5leHRfc2NhbiAmJg0KPiA+IC0gICAgICAgICAgICAgICAgICAgIWlzX3pl
cm9fZXRoZXJfYWRkcihzY2FuX2NmZ19vdXQtPnNwZWNpZmljX2Jzc2lkKSkNCj4gew0KPiA+ICsg
ICAgICAgICAgICAgICAgICAgIWlzX3plcm9fZXRoZXJfYWRkcl91bmFsaWduZWQoDQo+ID4gKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2FuX2NmZ19vdXQtPnNwZWNpZmljX2Jzc2lk
KSkgew0KPiANCj4gQW55IGNvbW1lbnRzPyBJcyB0aGlzIGFwcHJvYWNoIG9mIGFkZGluZw0KPiBp
c196ZXJvX2V0aGVyX2FkZHJfdW5hbGlnbmVkKCkgZmluZT8gV2UgYWxyZWFkeSBoYXZlIHNpbWls
YXIgcm91dGluZQ0KPiBldGhlcl9hZGRyX2VxdWFsX3VuYWxpZ25lZCgpLg0KPiANCj4gSSBkb24n
dCBzZWUgbXVjaCBiZW5lZml0IG1ha2luZyBhIGxvY2FsLCBhbGlnbmVkIGNvcHkgaGVyZS4gSXQg
d291bGQNCj4gaGF2ZSB0byB1c2UgbWVtY3B5IHcvIGJ5dGUgb3BlcmF0aW9ucyBhbnl3YXlzIGFu
ZCB0aGVuIHN0aWxsIHJ1bg0KPiBpc196ZXJvX2V0aGVyX2FkZHIoKS4NCj4gDQo+IEFtaXRrdW1h
ciAtLSBJcyBpdCBwb3NzaWJsZSB0byBtb2RpZnkgc3RydWN0IG13aWZpZXhfc2Nhbl9jbWRfY29u
ZmlnIHt9DQo+IGFuZCBhbGlnbiBzcGVjaWZpY19ic3NpZCBmaWVsZCB0byB1MTYgYm91bmRhcnk/
DQo+IA0KDQpXZSBjYW7igJl0IGNoYW5nZSB0aGUgc3RydWN0dXJlLiBUaGUgcmVhc29uIGlzIGZp
cm13YXJlIGF0IHJlY2VpdmluZyBlbmQgZXhwZWN0cyB0aGUgdmFyaWFibGVzIGluIHRoZSBzYW1l
IG9yZGVyLg0KaXNfemVyb19ldGhlcl9hZGRyX3VuYWxpZ25lZCgpIHNob3VsZCBiZSBmaW5lLg0K
DQpSZWdhcmRzLA0KQW1pdGt1bWFyDQo=

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 2/2] mwifiex: fix unaligned read in mwifiex_config_scan()
  2016-09-08 16:10     ` Amitkumar Karwar
@ 2016-09-08 18:01       ` Kalle Valo
  0 siblings, 0 replies; 9+ messages in thread
From: Kalle Valo @ 2016-09-08 18:01 UTC (permalink / raw)
  To: Amitkumar Karwar; +Cc: Petri Gynther, linux-wireless, David Miller, Joe Perches

Amitkumar Karwar <akarwar@marvell.com> writes:

>> > --- a/drivers/net/wireless/marvell/mwifiex/scan.c
>> > +++ b/drivers/net/wireless/marvell/mwifiex/scan.c
>> > @@ -883,7 +883,8 @@ mwifiex_config_scan(struct mwifiex_private *priv,
>> >                        sizeof(scan_cfg_out->specific_bssid));
>> >
>> >                 if (adapter->ext_scan &&
>> > -                   !is_zero_ether_addr(scan_cfg_out->specific_bssid))
>> {
>> > +                   !is_zero_ether_addr_unaligned(
>> > +                               scan_cfg_out->specific_bssid)) {
>> 
>> Any comments? Is this approach of adding
>> is_zero_ether_addr_unaligned() fine? We already have similar routine
>> ether_addr_equal_unaligned().
>> 
>> I don't see much benefit making a local, aligned copy here. It would
>> have to use memcpy w/ byte operations anyways and then still run
>> is_zero_ether_addr().
>> 
>> Amitkumar -- Is it possible to modify struct mwifiex_scan_cmd_config {}
>> and align specific_bssid field to u16 boundary?
>> 
>
> We can’t change the structure. The reason is firmware at receiving end
> expects the variables in the same order.
> is_zero_ether_addr_unaligned() should be fine.

If I understood correctly Dave doesn't like
is_zero_ether_addr_unaligned() so we can't use that either.

-- 
Kalle Valo

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [2/2] mwifiex: fix unaligned read in mwifiex_config_scan()
  2016-08-13  3:00 ` [PATCH 2/2] mwifiex: fix unaligned read in mwifiex_config_scan() Petri Gynther
  2016-08-16 17:47   ` Petri Gynther
@ 2016-09-26 11:19   ` Kalle Valo
  1 sibling, 0 replies; 9+ messages in thread
From: Kalle Valo @ 2016-09-26 11:19 UTC (permalink / raw)
  To: Petri Gynther; +Cc: linux-wireless, davem, joe, akarwar, Petri Gynther

Petri Gynther <pgynther@google.com> wrote:
> $ iwconfig mlan0 essid MySSID
> [   36.930000] Path: /sbin/iwconfig
> [   36.930000] CPU: 0 PID: 203 Comm: iwconfig Not tainted 4.7.0 #2
> [   36.940000] task: 866f83a0 ti: 866a6000 task.ti: 866a6000
> [   36.940000]
> [ECR   ]: 0x00230400 => Misaligned r/w from 0x8677f403
> [   36.960000] [EFA   ]: 0x8677f403
> [   36.960000] [BLINK ]: mwifiex_scan_networks+0x17a/0x198c [mwifiex]
> [   36.960000] [ERET  ]: mwifiex_scan_networks+0x18a/0x198c [mwifiex]
> [   36.980000] [STAT32]: 0x00000206 : K         E2 E1
> [   36.980000] BTA: 0x700736e2   SP: 0x866a7d0c  FP: 0x5faddc84
> [   37.000000] LPS: 0x806a37ec  LPE: 0x806a37fa LPC: 0x00000000
> [   37.000000] r00: 0x8677f401  r01: 0x8668aa08 r02: 0x00000001
> r03: 0x00000000 r04: 0x8668b600 r05: 0x8677f406
> r06: 0x8702b600 r07: 0x00000000 r08: 0x8702b600
> r09: 0x00000000 r10: 0x870b3b00 r11: 0x00000000
> r12: 0x00000000
> [   37.040000]
> [   37.040000] Stack Trace:
> [   37.040000]   mwifiex_scan_networks+0x18a/0x198c [mwifiex]
> 
> Root cause:
> mwifiex driver calls is_zero_ether_addr() against byte-aligned address:
> 
> drivers/net/wireless/marvell/mwifiex/fw.h:
> struct mwifiex_scan_cmd_config {
>         /*
>          *  BSS mode to be sent in the firmware command
>          */
>         u8 bss_mode;
> 
>         /* Specific BSSID used to filter scan results in the firmware */
>         u8 specific_bssid[ETH_ALEN];
> 
>         ...
> } __packed;
> 
> drivers/net/wireless/marvell/mwifiex/scan.c:
> mwifiex_config_scan(..., struct mwifiex_scan_cmd_config *scan_cfg_out, ...)
>         ...
>         if (adapter->ext_scan &&
>             !is_zero_ether_addr(scan_cfg_out->specific_bssid)) {
>             ...
>         }
> 
> Since firmware-related struct mwifiex_scan_cmd_config cannot be changed,
> we need to use the new function is_zero_ether_addr_unaligned() here.
> 
> This is v2 of the original patch:
> [PATCH] Modify is_zero_ether_addr() to handle byte-aligned addresses
> 
> Per Joe's suggestion -- instead of modifying is_zero_ether_addr() --
> add is_zero_ether_addr_unaligned() and use it where needed.
> 
> Cc: Kalle Valo <kvalo@codeaurora.org>
> Cc: David S. Miller <davem@davemloft.net>
> Cc: Joe Perches <joe@perches.com>
> Cc: Amitkumar Karwar <akarwar@marvell.com>
> Signed-off-by: Petri Gynther <pgynther@google.com>

Patch set to Rejected.

Reason: As is_zero_ether_addr_unaligned() patch is not applied I can't take
this. Please resend if that patch is accepted.

-- 
https://patchwork.kernel.org/patch/9306999/

Documentation about submitting wireless patches and checking status
from patchwork:

https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2016-09-26 11:19 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-08-13  2:59 [PATCH 1/2] etherdevice: add is_zero_ether_addr_unaligned() Petri Gynther
2016-08-13  3:00 ` [PATCH 2/2] mwifiex: fix unaligned read in mwifiex_config_scan() Petri Gynther
2016-08-16 17:47   ` Petri Gynther
2016-09-08 16:10     ` Amitkumar Karwar
2016-09-08 18:01       ` Kalle Valo
2016-09-26 11:19   ` [2/2] " Kalle Valo
2016-08-13  4:11 ` [PATCH 1/2] etherdevice: add is_zero_ether_addr_unaligned() Joe Perches
2016-08-13  4:40   ` Petri Gynther
2016-08-13  4:59     ` Joe Perches

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.