* [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.