pull request: wireless 2012-05-01
Subsystems (7)
commit 076e7779c07c56c7fa593a28c71ea7432d0c7c95
Dave,
This is a batch of fixes intended for 3.4...
Part of these are Bluetooth -- Gustavo says:
"A few more fixes to 3.4, there is three new device id supported, a missing break and a fix to retain key during the connection."
Along with those, we have some 802.11 fixes. Felix gives us a fix for sending EAP frames for AP VLAN interfaces. Franky gives us two brcmfmac fixes, one for missed event completions and another for an improperly initialized function pointer. Grazvydas Ignotas gives us a couple of wl1251 fixes for some improperly freed memory. Jonathan Bither gives us an ath5k fix for an AHB resource leak. Seth Forshee gives us a b43 fix to avoid a crash when b43 fails to properly initialize. Finally, Wey-yi gives us a fixup for a previously merged fix to use the correct firmware for certain iwlwifi devices.
The brcmfmac fixes are bigger than I would like to see. But since they are isolated to that driver and fix real problems, I felt they were still acceptable.
Please let me know if there are problems!
Thanks,
John
---
The following changes since commit 116a0fc31c6c9b8fc821be5a96e5bf0b43260131:
netem: fix possible skb leak (2012-05-01 13:40:48 -0400)
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless.git for-davem
AceLan Kao (2):
Bluetooth: Add support for Atheros [13d3:3362]
Bluetooth: Add support for AR3012 [0cf3:e004]
Felix Fietkau (1):
mac80211: fix AP mode EAP tx for VLAN stations
Franky Lin (2):
brcm80211: fmac: fix SDIO function 0 register r/w issue
brcm80211: fmac: fix missing completion events issue
Grazvydas Ignotas (2):
wl1251: fix crash on remove due to premature kfree
wl1251: fix crash on remove due to leftover work item
John W. Linville (2):
Merge branch 'for-upstream' of git://git.kernel.org/.../bluetooth/bluetooth
Merge branch 'master' of git://git.kernel.org/.../linville/wireless into for-davem
Jonathan Bither (1):
ath5k: add missing iounmap to AHB probe removal
Manoj Iyer (1):
Bluetooth: btusb: Add vendor specific ID (0489 e042) for BCM20702A0
Seth Forshee (1):
b43: only reload config after successful initialization
Steven Harms (1):
Add Foxconn / Hon Hai IDs for btusb module
Szymon Janc (1):
Bluetooth: Fix missing break in hci_cmd_complete_evt
Vishal Agarwal (2):
Bluetooth: hci_persistent_key should return bool
Bluetooth: Temporary keys should be retained during connection
Wey-Yi Guy (1):
iwlwifi: use 6000G2B for 6030 device series
drivers/bluetooth/ath3k.c | 4 + drivers/bluetooth/btusb.c | 6 ++ drivers/net/wireless/ath/ath5k/ahb.c | 1 + drivers/net/wireless/b43/main.c | 10 +++- .../net/wireless/brcm80211/brcmfmac/bcmsdh_sdmmc.c | 8 ++- drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c | 63 ++++++++++++++++---- drivers/net/wireless/iwlwifi/iwl-6000.c | 4 +- drivers/net/wireless/wl1251/main.c | 1 + drivers/net/wireless/wl1251/sdio.c | 2 +- include/net/bluetooth/hci_core.h | 3 +- net/bluetooth/hci_core.c | 27 ++++---- net/bluetooth/hci_event.c | 3 + net/bluetooth/mgmt.c | 2 +- net/mac80211/tx.c | 3 +- 14 files changed, 102 insertions(+), 35 deletions(-)
drivers/bluetooth/ath3k.c +4 -0
@@ -75,6 +75,8 @@ static struct usb_device_id ath3k_table[] = { { USB_DEVICE(0x0CF3, 0x311D) }, { USB_DEVICE(0x13d3, 0x3375) }, { USB_DEVICE(0x04CA, 0x3005) }, + { USB_DEVICE(0x13d3, 0x3362) }, + { USB_DEVICE(0x0CF3, 0xE004) },/* Atheros AR5BBU12 with sflash firmware */ { USB_DEVICE(0x0489, 0xE02C) },
@@ -94,6 +96,8 @@ static struct usb_device_id ath3k_blist_tbl[] = { { USB_DEVICE(0x0cf3, 0x311D), .driver_info = BTUSB_ATH3012 }, { USB_DEVICE(0x13d3, 0x3375), .driver_info = BTUSB_ATH3012 }, { USB_DEVICE(0x04ca, 0x3005), .driver_info = BTUSB_ATH3012 }, + { USB_DEVICE(0x13d3, 0x3362), .driver_info = BTUSB_ATH3012 }, + { USB_DEVICE(0x0cf3, 0xe004), .driver_info = BTUSB_ATH3012 }, { } /* Terminating entry */ };
drivers/bluetooth/btusb.c +6 -0
@@ -101,12 +101,16 @@ static struct usb_device_id btusb_table[] = { { USB_DEVICE(0x0c10, 0x0000) },/* Broadcom BCM20702A0 */ + { USB_DEVICE(0x0489, 0xe042) }, { USB_DEVICE(0x0a5c, 0x21e3) }, { USB_DEVICE(0x0a5c, 0x21e6) }, { USB_DEVICE(0x0a5c, 0x21e8) }, { USB_DEVICE(0x0a5c, 0x21f3) }, { USB_DEVICE(0x413c, 0x8197) }, +/* Foxconn - Hon Hai */ + { USB_DEVICE(0x0489, 0xe033) }, + { } /* Terminating entry */ };
@@ -133,6 +137,8 @@ static struct usb_device_id blacklist_table[] = { { USB_DEVICE(0x0cf3, 0x311d), .driver_info = BTUSB_ATH3012 }, { USB_DEVICE(0x13d3, 0x3375), .driver_info = BTUSB_ATH3012 }, { USB_DEVICE(0x04ca, 0x3005), .driver_info = BTUSB_ATH3012 }, + { USB_DEVICE(0x13d3, 0x3362), .driver_info = BTUSB_ATH3012 }, + { USB_DEVICE(0x0cf3, 0xe004), .driver_info = BTUSB_ATH3012 }, /* Atheros AR5BBU12 with sflash firmware */ { USB_DEVICE(0x0489, 0xe02c), .driver_info = BTUSB_IGNORE },
drivers/net/wireless/ath/ath5k/ahb.c +1 -0
@@ -220,6 +220,7 @@ static int ath_ahb_remove(struct platform_device *pdev) }ath5k_deinit_ah (ah); +iounmap (ah->iobase);platform_set_drvdata (pdev,NULL );ieee80211_free_hw (hw);
drivers/net/wireless/b43/main.c +8 -2
@@ -4827,8 +4827,14 @@ static int b43_op_start(struct ieee80211_hw *hw) out_mutex_unlock:mutex_unlock (&wl->mutex); -/* reload configuration */ -b43_op_config (hw, ~0 ); +/* +* Configuration may have been overwritten during initialization. +* Reload the configuration, but only if initialization was +* successful. Reloading the configuration after a failed init +* may hang the system. +*/ +if (!err) +b43_op_config (hw, ~0 );return err; }
drivers/net/wireless/brcm80211/brcmfmac/bcmsdh_sdmmc.c +7 -1
@@ -108,9 +108,15 @@ static inline int brcmf_sdioh_f0_write_byte(struct brcmf_sdio_dev *sdiodev,sdio_release_host (sdfunc); } }else if (regaddr ==SDIO_CCCR_ABORT ) { + sdfunc =kmemdup (sdiodev->func[0 ],sizeof (struct sdio_func ), +GFP_KERNEL ); +if (!sdfunc) +return -ENOMEM ; + sdfunc->num =0 ;sdio_claim_host (sdfunc);sdio_writeb (sdfunc, *byte, regaddr, &err_ret);sdio_release_host (sdfunc); +kfree (sdfunc); }else if (regaddr <0xF0 ) {brcmf_dbg (ERROR ,"F0 Wr:0x%02x: write disallowed\n" , regaddr); err_ret = -EPERM ;
@@ -486,7 +492,7 @@ static int brcmf_ops_sdio_probe(struct sdio_func *func,kfree (bus_if);return -ENOMEM ; } - sdiodev->func[0 ] = func->card->sdio_func[0 ]; + sdiodev->func[0 ] = func; sdiodev->func[1 ] = func; sdiodev->bus_if = bus_if; bus_if->bus_priv.sdio = sdiodev;
drivers/net/wireless/brcm80211/brcmfmac/dhd_sdio.c +51 -12
116 lines not on this page · raw message
drivers/net/wireless/iwlwifi/iwl-6000.c +2 -2
@@ -336,7 +336,7 @@ static const struct iwl_bt_params iwl6000_bt_params = {#define IWL_DEVICE_6005 \ .fw_name_pre = IWL6005_FW_PRE, \ .ucode_api_max = IWL6000G2_UCODE_API_MAX, \ - .ucode_api_ok = IWL6000G2B_UCODE_API_OK, \ + .ucode_api_ok = IWL6000G2_UCODE_API_OK, \ .ucode_api_min = IWL6000G2_UCODE_API_MIN, \ .max_inst_size = IWL60_RTC_INST_SIZE, \ .max_data_size = IWL60_RTC_DATA_SIZE, \
@@ -390,7 +390,7 @@ const struct iwl_cfg iwl6005_2agn_mow2_cfg = {#define IWL_DEVICE_6030 \ .fw_name_pre = IWL6030_FW_PRE, \ .ucode_api_max = IWL6000G2_UCODE_API_MAX, \ - .ucode_api_ok = IWL6000G2_UCODE_API_OK, \ + .ucode_api_ok = IWL6000G2B_UCODE_API_OK, \ .ucode_api_min = IWL6000G2_UCODE_API_MIN, \ .max_inst_size = IWL60_RTC_INST_SIZE, \ .max_data_size = IWL60_RTC_DATA_SIZE, \
drivers/net/wireless/wl1251/main.c +1 -0
@@ -479,6 +479,7 @@ static void wl1251_op_stop(struct ieee80211_hw *hw)cancel_work_sync (&wl->irq_work);cancel_work_sync (&wl->tx_work);cancel_work_sync (&wl->filter_work); +cancel_delayed_work_sync (&wl->elp_work);mutex_lock (&wl->mutex);
drivers/net/wireless/wl1251/sdio.c +1 -1
@@ -315,8 +315,8 @@ static void __devexit wl1251_sdio_remove(struct sdio_func *func)if (wl->irq)free_irq (wl->irq, wl); -kfree (wl_sdio);wl1251_free_hw (wl); +kfree (wl_sdio);sdio_claim_host (func);sdio_release_irq (func);
include/net/bluetooth/hci_core.h +2 -1
@@ -314,6 +314,7 @@ struct hci_conn {__u8 remote_cap;__u8 remote_auth; +bool flush_key;unsigned int sent;
@@ -980,7 +981,7 @@ int mgmt_discoverable(struct hci_dev *hdev, u8 discoverable);int mgmt_connectable (struct hci_dev *hdev,u8 connectable);int mgmt_write_scan_failed (struct hci_dev *hdev,u8 scan,u8 status);int mgmt_new_link_key (struct hci_dev *hdev,struct link_key *key, -u8 persistent); +bool persistent);int mgmt_device_connected (struct hci_dev *hdev,bdaddr_t *bdaddr,u8 link_type,u8 addr_type,u32 flags,u8 *name,u8 name_len,u8 *dev_class);
net/bluetooth/hci_core.c +13 -14
@@ -1215,40 +1215,40 @@ struct link_key *hci_find_link_key(struct hci_dev *hdev, bdaddr_t *bdaddr)return NULL ; } -static int hci_persistent_key (struct hci_dev *hdev,struct hci_conn *conn, +static bool hci_persistent_key (struct hci_dev *hdev,struct hci_conn *conn,u8 key_type,u8 old_key_type) {/* Legacy key */ if (key_type <0x03 ) -return 1 ; +return true;/* Debug keys are insecure so don't store them persistently */ if (key_type ==HCI_LK_DEBUG_COMBINATION ) -return 0 ; +return false;/* Changed combination key and there's no previous one */ if (key_type ==HCI_LK_CHANGED_COMBINATION && old_key_type ==0xff ) -return 0 ; +return false;/* Security mode 3 case */ if (!conn) -return 1 ; +return true;/* Neither local nor remote side had no-bonding as requirement */ if (conn->auth_type >0x01 && conn->remote_auth >0x01 ) -return 1 ; +return true;/* Local side had dedicated bonding as requirement */ if (conn->auth_type ==0x02 || conn->auth_type ==0x03 ) -return 1 ; +return true;/* Remote side had dedicated bonding as requirement */ if (conn->remote_auth ==0x02 || conn->remote_auth ==0x03 ) -return 1 ; +return true;/* If none of the above criteria match, then don't store the key * persistently */ -return 0 ; +return false; }struct smp_ltk *hci_find_ltk (struct hci_dev *hdev,__le16 ediv,u8 rand[8 ])
@@ -1285,7 +1285,8 @@ int hci_add_link_key(struct hci_dev *hdev, struct hci_conn *conn, int new_key, bdaddr_t *bdaddr, u8 *val, u8 type, u8 pin_len) {struct link_key *key, *old_key; -u8 old_key_type, persistent; +u8 old_key_type; +bool persistent; old_key =hci_find_link_key (hdev, bdaddr);if (old_key) {
@@ -1328,10 +1329,8 @@ int hci_add_link_key(struct hci_dev *hdev, struct hci_conn *conn, int new_key,mgmt_new_link_key (hdev, key, persistent); -if (!persistent) { -list_del (&key->list); -kfree (key); - } +if (conn) + conn->flush_key = !persistent;return 0 ; }
net/bluetooth/hci_event.c +3 -0
@@ -1901,6 +1901,8 @@ static inline void hci_disconn_complete_evt(struct hci_dev *hdev, struct sk_buff }if (ev->status ==0 ) { +if (conn->type ==ACL_LINK && conn->flush_key) +hci_remove_link_key (hdev, &conn->dst);hci_proto_disconn_cfm (conn, ev->reason);hci_conn_del (conn); }
@@ -2311,6 +2313,7 @@ static inline void hci_cmd_complete_evt(struct hci_dev *hdev, struct sk_buff *skcase HCI_OP_USER_PASSKEY_NEG_REPLY :hci_cc_user_passkey_neg_reply (hdev, skb); +break ;case HCI_OP_LE_SET_SCAN_PARAM :hci_cc_le_set_scan_param (hdev, skb);
net/bluetooth/mgmt.c +1 -1
@@ -2884,7 +2884,7 @@ int mgmt_write_scan_failed(struct hci_dev *hdev, u8 scan, u8 status)return 0 ; } -int mgmt_new_link_key (struct hci_dev *hdev,struct link_key *key,u8 persistent) +int mgmt_new_link_key (struct hci_dev *hdev,struct link_key *key,bool persistent) {struct mgmt_ev_new_link_key ev;
net/mac80211/tx.c +2 -1
@@ -1158,7 +1158,8 @@ ieee80211_tx_prepare(struct ieee80211_sub_if_data *sdata, tx->sta =rcu_dereference (sdata->u.vlan.sta);if (!tx->sta && sdata->dev->ieee80211_ptr->use_4addr)return TX_DROP ; - }else if (info->flags &IEEE80211_TX_CTL_INJECTED ) { + }else if (info->flags &IEEE80211_TX_CTL_INJECTED || + tx->sdata->control_port_protocol == tx->skb->protocol) { tx->sta =sta_info_get_bss (sdata, hdr->addr1); }if (!tx->sta)
Signature · 2 lines
John W. Linville Someday the world will need a hero, and you [email protected] might be all we have. Be ready.
David Miller
maintainerFrom: "John W. Linville" <[email protected]>
Date: Tue, 1 May 2012 14:31:58 -0400
Quoted 15 lines
Part of these are Bluetooth -- Gustavo says:
"A few more fixes to 3.4, there is three new device id supported, a missing break and a fix to retain key during the connection."
Along with those, we have some 802.11 fixes. Felix gives us a fix for sending EAP frames for AP VLAN interfaces. Franky gives us two brcmfmac fixes, one for missed event completions and another for an improperly initialized function pointer. Grazvydas Ignotas gives us a couple of wl1251 fixes for some improperly freed memory. Jonathan Bither gives us an ath5k fix for an AHB resource leak. Seth Forshee gives us a b43 fix to avoid a crash when b43 fails to properly initialize. Finally, Wey-yi gives us a fixup for a previously merged fix to use the correct firmware for certain iwlwifi devices.
Quoted 5 lines
The brcmfmac fixes are bigger than I would like to see. But since they are isolated to that driver and fix real problems, I felt they were still acceptable.
Please let me know if there are problems!
Pulled, thanks John.
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html