mwifiex: endian bug in mwifiex_drv_change_adhoc_chan()
authorDan Carpenter <dan.carpenter@oracle.com>
Thu, 1 Mar 2012 07:22:30 +0000 (10:22 +0300)
committerJohn W. Linville <linville@tuxdriver.com>
Mon, 5 Mar 2012 20:24:14 +0000 (15:24 -0500)
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.

Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Acked-by: Bing Zhao <bzhao@marvell.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/mwifiex/main.h
drivers/net/wireless/mwifiex/sta_ioctl.c

index a0bd4ebd262ad0c1b0fd27fb015d68a68891c1e1..6dc116647411255741f2157b9063cb070b27bee3 100644 (file)
@@ -909,10 +909,9 @@ int mwifiex_request_scan(struct mwifiex_private *priv,
                         struct cfg80211_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);
index 593d285111d2292a4295f8984db9237cefa585ca..0ae1209646c14859e76cc311f3cfdff585b501d8 100644 (file)
@@ -609,7 +609,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;
@@ -646,7 +646,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)) {