Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'for-net-2025-04-10' of git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth

Luiz Augusto von Dentz says:

====================
bluetooth pull request for net:

- btrtl: Prevent potential NULL dereference
- qca: fix NV variant for one of WCN3950 SoCs
- l2cap: Check encryption key size on incoming connection
- hci_event: Fix sending MGMT_EV_DEVICE_FOUND for invalid address
- btnxpuart: Revert baudrate change in nxp_shutdown
- btnxpuart: Add an error message if FW dump trigger fails
- increment TX timestamping tskey always for stream sockets

* tag 'for-net-2025-04-10' of git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth:
Bluetooth: l2cap: Check encryption key size on incoming connection
Bluetooth: btnxpuart: Add an error message if FW dump trigger fails
Bluetooth: btnxpuart: Revert baudrate change in nxp_shutdown
Bluetooth: increment TX timestamping tskey always for stream sockets
Bluetooth: qca: fix NV variant for one of WCN3950 SoCs
Bluetooth: btrtl: Prevent potential NULL dereference
Bluetooth: hci_event: Fix sending MGMT_EV_DEVICE_FOUND for invalid address
====================

Link: https://patch.msgid.link/20250410173542.625232-1-luiz.dentz@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>

+25 -16
+11 -10
drivers/bluetooth/btnxpuart.c
··· 1286 1286 u8 pcmd = 2; 1287 1287 1288 1288 skb = nxp_drv_send_cmd(hdev, HCI_NXP_TRIGGER_DUMP, 1, &pcmd); 1289 - if (!IS_ERR(skb)) 1289 + if (IS_ERR(skb)) 1290 + bt_dev_err(hdev, "Failed to trigger FW Dump. (%ld)", PTR_ERR(skb)); 1291 + else 1290 1292 kfree_skb(skb); 1291 1293 } 1292 1294 ··· 1447 1445 /* HCI_NXP_IND_RESET command may not returns any response */ 1448 1446 if (!IS_ERR(skb)) 1449 1447 kfree_skb(skb); 1450 - } else if (nxpdev->current_baudrate != nxpdev->fw_init_baudrate) { 1451 - nxpdev->new_baudrate = nxpdev->fw_init_baudrate; 1452 - nxp_set_baudrate_cmd(hdev, NULL); 1453 1448 } 1454 1449 1455 1450 return 0; ··· 1798 1799 clear_bit(BTNXPUART_FW_DOWNLOADING, &nxpdev->tx_state); 1799 1800 wake_up_interruptible(&nxpdev->check_boot_sign_wait_q); 1800 1801 wake_up_interruptible(&nxpdev->fw_dnld_done_wait_q); 1801 - } 1802 - 1803 - if (test_bit(HCI_RUNNING, &hdev->flags)) { 1804 - /* Ensure shutdown callback is executed before unregistering, so 1805 - * that baudrate is reset to initial value. 1802 + } else { 1803 + /* Restore FW baudrate to fw_init_baudrate if changed. 1804 + * This will ensure FW baudrate is in sync with 1805 + * driver baudrate in case this driver is re-inserted. 1806 1806 */ 1807 - nxp_shutdown(hdev); 1807 + if (nxpdev->current_baudrate != nxpdev->fw_init_baudrate) { 1808 + nxpdev->new_baudrate = nxpdev->fw_init_baudrate; 1809 + nxp_set_baudrate_cmd(hdev, NULL); 1810 + } 1808 1811 } 1809 1812 1810 1813 ps_cleanup(nxpdev);
+1 -1
drivers/bluetooth/btqca.c
··· 889 889 if (le32_to_cpu(ver.soc_id) == QCA_WCN3950_SOC_ID_T) 890 890 variant = "t"; 891 891 else if (le32_to_cpu(ver.soc_id) == QCA_WCN3950_SOC_ID_S) 892 - variant = "u"; 892 + variant = "s"; 893 893 894 894 snprintf(config.fwname, sizeof(config.fwname), 895 895 "qca/cmnv%02x%s.bin", rom_ver, variant);
+2
drivers/bluetooth/btrtl.c
··· 1215 1215 rtl_dev_err(hdev, "mandatory config file %s not found", 1216 1216 btrtl_dev->ic_info->cfg_name); 1217 1217 ret = btrtl_dev->cfg_len; 1218 + if (!ret) 1219 + ret = -EINVAL; 1218 1220 goto err_free; 1219 1221 } 1220 1222 }
+6 -2
net/bluetooth/hci_conn.c
··· 3072 3072 const struct sockcm_cookie *sockc) 3073 3073 { 3074 3074 struct sock *sk = skb ? skb->sk : NULL; 3075 + int key; 3075 3076 3076 3077 /* This shall be called on a single skb of those generated by user 3077 3078 * sendmsg(), and only when the sendmsg() does not return error to ··· 3088 3087 3089 3088 sock_tx_timestamp(sk, sockc, &skb_shinfo(skb)->tx_flags); 3090 3089 3090 + if (sk->sk_type == SOCK_STREAM) 3091 + key = atomic_add_return(key_offset, &sk->sk_tskey); 3092 + 3091 3093 if (sockc->tsflags & SOF_TIMESTAMPING_OPT_ID && 3092 3094 sockc->tsflags & SOF_TIMESTAMPING_TX_RECORD_MASK) { 3093 3095 if (sockc->tsflags & SOCKCM_FLAG_TS_OPT_ID) { 3094 3096 skb_shinfo(skb)->tskey = sockc->ts_opt_id; 3095 3097 } else { 3096 - int key = atomic_add_return(key_offset, &sk->sk_tskey); 3097 - 3098 + if (sk->sk_type != SOCK_STREAM) 3099 + key = atomic_inc_return(&sk->sk_tskey); 3098 3100 skb_shinfo(skb)->tskey = key - 1; 3099 3101 } 3100 3102 }
+3 -2
net/bluetooth/hci_event.c
··· 6160 6160 * event or send an immediate device found event if the data 6161 6161 * should not be stored for later. 6162 6162 */ 6163 - if (!ext_adv && !has_pending_adv_report(hdev)) { 6163 + if (!has_pending_adv_report(hdev)) { 6164 6164 /* If the report will trigger a SCAN_REQ store it for 6165 6165 * later merging. 6166 6166 */ 6167 - if (type == LE_ADV_IND || type == LE_ADV_SCAN_IND) { 6167 + if (!ext_adv && (type == LE_ADV_IND || 6168 + type == LE_ADV_SCAN_IND)) { 6168 6169 store_pending_adv_report(hdev, bdaddr, bdaddr_type, 6169 6170 rssi, flags, data, len); 6170 6171 return;
+2 -1
net/bluetooth/l2cap_core.c
··· 3991 3991 3992 3992 /* Check if the ACL is secure enough (if not SDP) */ 3993 3993 if (psm != cpu_to_le16(L2CAP_PSM_SDP) && 3994 - !hci_conn_check_link_mode(conn->hcon)) { 3994 + (!hci_conn_check_link_mode(conn->hcon) || 3995 + !l2cap_check_enc_key_size(conn->hcon))) { 3995 3996 conn->disc_reason = HCI_ERROR_AUTH_FAILURE; 3996 3997 result = L2CAP_CR_SEC_BLOCK; 3997 3998 goto response;