mwifiex: endian bug in mwifiex_drv_change_adhoc_chan()
Subsystems (2)
PATCH 1/1 mwifiex: endian bug in mwifiex_drv_change_adhoc_chan()
In mwifiex_drv_change_adhoc_chan() we pass channel to mwifiex_bss_ioctl_ibss_channel() which sets the high 16 bits. This works on little endian systems but not on big endian ones. I've changed mwifiex_drv_change_adhoc_chan() to use a 16 bit variable. This matches the other functions in the file.
I considered changing mwifiex_change_adhoc_chan() as well but it turns out that the function isn't implemented so I just removed the definition.
drivers/net/wireless/mwifiex/main.h +1 -2
@@ -909,10 +909,9 @@ int mwifiex_request_scan(struct mwifiex_private *priv, struct mwifiex_802_11_ssid *req_ssid);int mwifiex_set_user_scan_ioctl (struct mwifiex_private *priv,struct mwifiex_user_scan_cfg *scan_req); -int mwifiex_change_adhoc_chan (struct mwifiex_private *priv,int channel);int mwifiex_set_radio (struct mwifiex_private *priv,u8 option); -int mwifiex_drv_change_adhoc_chan (struct mwifiex_private *priv,int channel); +int mwifiex_drv_change_adhoc_chan (struct mwifiex_private *priv,u16 channel);int mwifiex_set_encode (struct mwifiex_private *priv,const u8 *key,int key_len,u8 key_index,int disable);
drivers/net/wireless/mwifiex/sta_ioctl.c +2 -2
@@ -599,7 +599,7 @@ static int mwifiex_bss_ioctl_ibss_channel(struct mwifiex_private *priv,* - Start/Join the IBSS */ int -mwifiex_drv_change_adhoc_chan (struct mwifiex_private *priv,int channel) +mwifiex_drv_change_adhoc_chan (struct mwifiex_private *priv,u16 channel) {int ret;struct mwifiex_bss_info bss_info;
@@ -636,7 +636,7 @@ mwifiex_drv_change_adhoc_chan(struct mwifiex_private *priv, int channel) ret =mwifiex_deauthenticate (priv, ssid_bssid.bssid); ret =mwifiex_bss_ioctl_ibss_channel (priv, HostCmd_ACT_GEN_SET, - (u16 *) &channel); + &channel);/* Do specific SSID scanning */ if (mwifiex_request_scan (priv, &bss_info.ssid)) {
Hi Dan,
Thanks for your patch.
It looks correct.
Hi John,
There is a conflict between this patch and a patch I submitted previously.
mwifiex: remove unnecessary struct mwifiex_802_11_ssid
If you are going to take my patch series (except for the one 6/6, NACKed by Johannes), either Dan or myself can rebase this patch.
I have ACKed Dan's patch under the s-o-b line below, in case you want to merge his patch first.
Thanks,
Bing
Quoted 8 lines
Subject: [patch] mwifiex: endian bug in
mwifiex_drv_change_adhoc_chan()In
mwifiex_drv_change_adhoc_chan()we pass channel tomwifiex_bss_ioctl_ibss_channel()which sets the high 16 bits. This works on little endian systems but not on big endian ones. I've changedmwifiex_drv_change_adhoc_chan()to use a 16 bit variable. This matches the other functions in the file.
Quoted 5 lines
I considered changing
mwifiex_change_adhoc_chan()as well but it turns out that the function isn't implemented so I just removed the definition.Signed-off-by Dan Carpenter <[email protected]>
Quoted 39 lines
drivers/net/wireless/mwifiex/main.h +1
-2@@ -909,10 +909,9 @@ int mwifiex_request_scan(struct mwifiex_private *priv, struct mwifiex_802_11_ssid *req_ssid);int mwifiex_set_user_scan_ioctl (struct mwifiex_private *priv,struct mwifiex_user_scan_cfg *scan_req); -int mwifiex_change_adhoc_chan (struct mwifiex_private *priv,int channel);int mwifiex_set_radio (struct mwifiex_private *priv,u8 option); -int mwifiex_drv_change_adhoc_chan (struct mwifiex_private *priv,int channel); +int mwifiex_drv_change_adhoc_chan (struct mwifiex_private *priv,u16 channel);int mwifiex_set_encode (struct mwifiex_private *priv,const u8 *key,int key_len,u8 key_index,int disable);drivers/net/wireless/mwifiex/sta_ioctl.c +2
-2@@ -599,7 +599,7 @@ static int mwifiex_bss_ioctl_ibss_channel(struct mwifiex_private *priv,* - Start/Join the IBSS */ int -mwifiex_drv_change_adhoc_chan (struct mwifiex_private *priv,int channel) +mwifiex_drv_change_adhoc_chan (struct mwifiex_private *priv,u16 channel) {int ret;struct mwifiex_bss_info bss_info;@@ -636,7 +636,7 @@ mwifiex_drv_change_adhoc_chan(struct mwifiex_private *priv, int channel) ret =mwifiex_deauthenticate (priv, ssid_bssid.bssid); ret =mwifiex_bss_ioctl_ibss_channel (priv, HostCmd_ACT_GEN_SET, - (u16 *) &channel); + &channel);/* Do specific SSID scanning */ if (mwifiex_request_scan (priv, &bss_info.ssid)) {