1. 25 4月, 2023 26 次提交
  2. 24 4月, 2023 14 次提交
    • D
      Merge tag 'for-net-next-2023-04-23' of... · 2efb07b5
      David S. Miller 提交于
      Merge tag 'for-net-next-2023-04-23' of git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth-next
      
      bluetooth-next pull request for net-next:
      
       - Introduce devcoredump support
       - Add support for Realtek RTL8821CS, RTL8851B, RTL8852BS
       - Add support for Mediatek MT7663, MT7922
       - Add support for NXP w8997
       - Add support for Actions Semi ATS2851
       - Add support for QTI WCN6855
       - Add support for Marvell 88W8997
      2efb07b5
    • L
      Bluetooth: hci_sync: Only allow hci_cmd_sync_queue if running · d883a466
      Luiz Augusto von Dentz 提交于
      This makes sure hci_cmd_sync_queue only queue new work if HCI_RUNNING
      has been set otherwise there is a risk of commands being sent while
      turning off.
      
      Because hci_cmd_sync_queue can no longer queue work while HCI_RUNNING is
      not set it cannot be used to power on adapters so instead
      hci_cmd_sync_submit is introduced which bypass the HCI_RUNNING check, so
      it behaves like the old implementation.
      
      Link: https://lore.kernel.org/all/CAB4PzUpDMvdc8j2MdeSAy1KkAE-D3woprCwAdYWeOc-3v3c9Sw@mail.gmail.com/Signed-off-by: NLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
      d883a466
    • T
      Bluetooth: btusb: Add WCN6855 devcoredump support · 20981ce2
      Tim Jiang 提交于
      WCN6855 will report memdump via ACL data or HCI event when
      it get crashed, so we collect memdump to debug firmware.
      Signed-off-by: NTim Jiang <quic_tjiang@quicinc.com>
      Signed-off-by: NLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
      20981ce2
    • N
      Bluetooth: btnxpuart: Enable flow control before checking boot signature · b0310d6e
      Neeraj Sanjay Kale 提交于
      This enables flow control before checking for bootloader signature and
      deciding whether FW download is needed or not. In case of V1 bootloader
      chips w8987 and w8997, it is observed that if WLAN FW is downloaded first
      and power save is enabled in wlan core, bootloader signatures are not
      emitted by the BT core when the chip is put to sleep. As a result, the
      driver skips FW download and subsequent HCI commands get timeout errors
      in dmesg as shown below:
      
      [  112.898867] Bluetooth: hci0: Opcode 0x c03 failed: -110
      [  114.914865] Bluetooth: hci0: Setting baudrate failed (-110)
      [  116.930856] Bluetooth: hci0: Setting wake-up method failed (-110)
      
      By enabling the flow control, the host enables its RTS pin, and an
      interrupt in chip's UART peripheral causes the bootloader to wake up,
      enabling the bootloader signatures, which then helps in downloading
      the bluetooth FW file.
      
      This changes all instances of 0/1 for serdev_device_set_flow_control()
      to false/true.
      Signed-off-by: NNeeraj Sanjay Kale <neeraj.sanjaykale@nxp.com>
      Signed-off-by: NLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
      b0310d6e
    • A
      Bluetooth: Cancel sync command before suspend and power off · f4198635
      Archie Pusaka 提交于
      Some of the sync commands might take a long time to complete, e.g.
      LE Create Connection when the peer device isn't responding might take
      20 seconds before it times out. If suspend command is issued during
      this time, it will need to wait for completion since both commands are
      using the same sync lock.
      
      This patch cancel any running sync commands before attempting to
      suspend or adapter power off.
      Signed-off-by: NArchie Pusaka <apusaka@chromium.org>
      Reviewed-by: NYing Hsu <yinghsu@chromium.org>
      Signed-off-by: NLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
      f4198635
    • M
      Bluetooth: btrtl: Add the support for RTL8851B · 7948fe1c
      Max Chou 提交于
      Add the support for RTL8851B BT controller on USB interface.
      The necessary firmware will be submitted to linux-firmware project.
      
      Note that the Bluetooth devices WITH the VID=0x0bda would be set the
      feature quirk in btrtl_setup_realtek(). It's able to ignore the
      feature flag set for the specific VID and PID in blacklist_table[] of
      btusb.c. (check [1])
      
      If Realtek Bluetooth chips WITHOUT the VID=0x0bda, it shall be added
      the feature flag for the specific VID and PID in blacklist_table[] of
      btusb.c. (check [2])
      
      [1] '9ab9235f ("Bluetooth: btrtl: Enable WBS for the specific
          Realtek devices")'
      [2] '73280f13 ("Bluetooth: btusb: Add the more support IDs for
          Realtek RTL8822CE")'
      
      The device info from /sys/kernel/debug/usb/devices as below.
      
      T:  Bus=03 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 33 Spd=480  MxCh= 0
      D:  Ver= 2.00 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs=  1
      P:  Vendor=0bda ProdID=b851 Rev= 0.00
      S:  Manufacturer=Realtek
      S:  Product=802.11ax WLAN Adapter
      S:  SerialNumber=00E04C885A01
      C:* #Ifs= 3 Cfg#= 1 Atr=80 MxPwr=500mA
      A:  FirstIf#= 0 IfCount= 2 Cls=e0(wlcon) Sub=01 Prot=01
      I:* If#= 0 Alt= 0 #EPs= 3 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
      E:  Ad=81(I) Atr=03(Int.) MxPS=  16 Ivl=1ms
      E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
      E:  Ad=82(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
      I:* If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
      E:  Ad=03(O) Atr=01(Isoc) MxPS=   0 Ivl=1ms
      E:  Ad=83(I) Atr=01(Isoc) MxPS=   0 Ivl=1ms
      I:  If#= 1 Alt= 1 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
      E:  Ad=03(O) Atr=01(Isoc) MxPS=   9 Ivl=1ms
      E:  Ad=83(I) Atr=01(Isoc) MxPS=   9 Ivl=1ms
      I:  If#= 1 Alt= 2 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
      E:  Ad=03(O) Atr=01(Isoc) MxPS=  17 Ivl=1ms
      E:  Ad=83(I) Atr=01(Isoc) MxPS=  17 Ivl=1ms
      I:  If#= 1 Alt= 3 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
      E:  Ad=03(O) Atr=01(Isoc) MxPS=  25 Ivl=1ms
      E:  Ad=83(I) Atr=01(Isoc) MxPS=  25 Ivl=1ms
      I:  If#= 1 Alt= 4 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
      E:  Ad=03(O) Atr=01(Isoc) MxPS=  33 Ivl=1ms
      E:  Ad=83(I) Atr=01(Isoc) MxPS=  33 Ivl=1ms
      I:  If#= 1 Alt= 5 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
      E:  Ad=03(O) Atr=01(Isoc) MxPS=  49 Ivl=1ms
      E:  Ad=83(I) Atr=01(Isoc) MxPS=  49 Ivl=1ms
      I:* If#= 2 Alt= 0 #EPs= 8 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
      E:  Ad=84(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
      E:  Ad=05(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
      E:  Ad=06(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
      E:  Ad=07(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
      E:  Ad=09(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
      E:  Ad=0a(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
      E:  Ad=0b(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
      E:  Ad=0c(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
      Signed-off-by: NMax Chou <max.chou@realtek.com>
      Signed-off-by: NLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
      7948fe1c
    • L
      Bluetooth: btnxpuart: Fix sparse warnings · 9e080b53
      Luiz Augusto von Dentz 提交于
      This fixes the following sparse warnings:
      
         drivers/bluetooth/btnxpuart.c:681:23: sparse: sparse:
         restricted __le16 degrades to integer
         drivers/bluetooth/btnxpuart.c:690:82: sparse:
         sparse: incorrect type in argument 2 (different base types)
         @@     expected unsigned short [usertype] req_len
         @@     got restricted __le16 [usertype] len @@
         drivers/bluetooth/btnxpuart.c:690:82: sparse:
         expected unsigned short [usertype] req_len
         drivers/bluetooth/btnxpuart.c:690:82: sparse:
         got restricted __le16 [usertype] len
         drivers/bluetooth/btnxpuart.c:694:84: sparse:
         sparse: incorrect type in argument 2 (different base types)
         @@     expected unsigned short [usertype] req_len
         @@     got restricted __le16 [usertype] len @@
         drivers/bluetooth/btnxpuart.c:694:84: sparse:
         expected unsigned short [usertype] req_len
         drivers/bluetooth/btnxpuart.c:694:84: sparse:
         got restricted __le16 [usertype] len
         drivers/bluetooth/btnxpuart.c:708:23: sparse:
         sparse: incorrect type in assignment (different base types)
         @@     expected unsigned int [usertype] requested_len
         @@     got restricted __le16 [usertype] len @@
         drivers/bluetooth/btnxpuart.c:708:23: sparse:
         expected unsigned int [usertype] requested_len
         drivers/bluetooth/btnxpuart.c:708:23: sparse:
         got restricted __le16 [usertype] len
         drivers/bluetooth/btnxpuart.c:787:78: sparse:
         sparse: incorrect type in argument 2 (different base types)
         @@     expected unsigned short [usertype] chipid
         @@     got restricted __le16 [usertype] chip_id @@
         drivers/bluetooth/btnxpuart.c:787:78: sparse:
         expected unsigned short [usertype] chipid
         drivers/bluetooth/btnxpuart.c:787:78: sparse:
         got restricted __le16 [usertype] chip_id
         drivers/bluetooth/btnxpuart.c:810:74: sparse:
         sparse: incorrect type in argument 2 (different base types)
         @@     expected unsigned short [usertype] req_len
         @@     got restricted __le16 [usertype] len @@
         drivers/bluetooth/btnxpuart.c:810:74: sparse:
         expected unsigned short [usertype] req_len
         drivers/bluetooth/btnxpuart.c:810:74: sparse:
         got restricted __le16 [usertype] len
         drivers/bluetooth/btnxpuart.c:815:76: sparse:
         sparse: incorrect type in argument 2 (different base types)
         @@     expected unsigned short [usertype] req_len
         @@     got restricted __le16 [usertype] len @@
         drivers/bluetooth/btnxpuart.c:815:76: sparse:
         expected unsigned short [usertype] req_len
         drivers/bluetooth/btnxpuart.c:815:76: sparse:
         got restricted __le16 [usertype] len
         drivers/bluetooth/btnxpuart.c:834:16: sparse:
         sparse: restricted __le32 degrades to integer
         drivers/bluetooth/btnxpuart.c:843:55: sparse:
         sparse: restricted __le32 degrades to integer
         drivers/bluetooth/btnxpuart.c:844:36: sparse:
         sparse: incorrect type in argument 3 (different base types)
         @@     expected unsigned long [usertype]
         @@     got restricted __le16 [usertype] len @@
         drivers/bluetooth/btnxpuart.c:844:36: sparse:
         expected unsigned long [usertype]
         drivers/bluetooth/btnxpuart.c:844:36: sparse:
         got restricted __le16 [usertype] len
      Reported-by: Nkernel test robot <lkp@intel.com>
      Link: https://lore.kernel.org/oe-kbuild-all/202304160736.Tsa0zTBU-lkp@intel.com/Signed-off-by: NLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
      9e080b53
    • M
      Bluetooth: btrtl: Firmware format v2 support · 9a24ce5e
      Max Chou 提交于
      Realtek changed the format of the firmware file as v2. The driver
      should implement the patch to extract the firmware data from the
      firmware file. The future chips must apply this patch for firmware loading.
      This patch is compatible with the both previous format and v2 as well.
      Signed-off-by: NAllen Chen <allen_chen@realsil.com.cn>
      Signed-off-by: NAlex Lu <alex_lu@realsil.com.cn>
      Tested-by: NHilda Wu <hildawu@realtek.com>
      Signed-off-by: NMax Chou <max.chou@realtek.com>
      Signed-off-by: NLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
      9a24ce5e
    • Z
      Bluetooth: Devcoredump: Fix storing u32 without specifying byte order issue · 0ab905c3
      Zijun Hu 提交于
      API hci_devcd_init() stores its u32 type parameter @dump_size into
      skb, but it does not specify which byte order is used to store the
      integer, let us take little endian to store and parse the integer.
      
      Fixes: f5cc609d09d4 ("Bluetooth: Add support for hci devcoredump")
      Signed-off-by: NZijun Hu <quic_zijuhu@quicinc.com>
      Signed-off-by: NLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
      0ab905c3
    • R
      bluetooth: Perform careful capability checks in hci_sock_ioctl() · 25c150ac
      Ruihan Li 提交于
      Previously, capability was checked using capable(), which verified that the
      caller of the ioctl system call had the required capability. In addition,
      the result of the check would be stored in the HCI_SOCK_TRUSTED flag,
      making it persistent for the socket.
      
      However, malicious programs can abuse this approach by deliberately sharing
      an HCI socket with a privileged task. The HCI socket will be marked as
      trusted when the privileged task occasionally makes an ioctl call.
      
      This problem can be solved by using sk_capable() to check capability, which
      ensures that not only the current task but also the socket opener has the
      specified capability, thus reducing the risk of privilege escalation
      through the previously identified vulnerability.
      
      Cc: stable@vger.kernel.org
      Fixes: f81f5b2d ("Bluetooth: Send control open and close messages for HCI raw sockets")
      Signed-off-by: NRuihan Li <lrh2000@pku.edu.cn>
      Signed-off-by: NLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
      25c150ac
    • M
      Bluetooth: L2CAP: fix "bad unlock balance" in l2cap_disconnect_rsp · 25e97f7b
      Min Li 提交于
      conn->chan_lock isn't acquired before l2cap_get_chan_by_scid,
      if l2cap_get_chan_by_scid returns NULL, then 'bad unlock balance'
      is triggered.
      
      Reported-by: syzbot+9519d6b5b79cf7787cf3@syzkaller.appspotmail.com
      Link: https://lore.kernel.org/all/000000000000894f5f05f95e9f4d@google.com/Signed-off-by: NMin Li <lm0963hack@gmail.com>
      Signed-off-by: NLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
      25e97f7b
    • R
      bluetooth: Add cmd validity checks at the start of hci_sock_ioctl() · 000c2fa2
      Ruihan Li 提交于
      Previously, channel open messages were always sent to monitors on the first
      ioctl() call for unbound HCI sockets, even if the command and arguments
      were completely invalid. This can leave an exploitable hole with the abuse
      of invalid ioctl calls.
      
      This commit hardens the ioctl processing logic by first checking if the
      command is valid, and immediately returning with an ENOIOCTLCMD error code
      if it is not. This ensures that ioctl calls with invalid commands are free
      of side effects, and increases the difficulty of further exploitation by
      forcing exploitation to find a way to pass a valid command first.
      Signed-off-by: NRuihan Li <lrh2000@pku.edu.cn>
      Co-developed-by: NMarcel Holtmann <marcel@holtmann.org>
      Signed-off-by: NMarcel Holtmann <marcel@holtmann.org>
      Signed-off-by: NLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
      000c2fa2
    • L
      Revert "Bluetooth: btsdio: fix use after free bug in btsdio_remove due to unfinished work" · db2bf510
      Liu Jian 提交于
      This reverts commit 1e9ac114.
      
      This patch introduces a possible null-ptr-def problem. Revert it. And the
      fixed bug by this patch have resolved by commit 73f7b171 ("Bluetooth:
      btsdio: fix use after free bug in btsdio_remove due to race condition").
      
      Fixes: 1e9ac114 ("Bluetooth: btsdio: fix use after free bug in btsdio_remove due to unfinished work")
      Signed-off-by: NLiu Jian <liujian56@huawei.com>
      Signed-off-by: NLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
      db2bf510
    • R
      Bluetooth: Add new quirk for broken set random RPA timeout for ATS2851 · 91b6d02d
      Raul Cheleguini 提交于
      The ATS2851 based controller advertises support for command "LE Set Random
      Private Address Timeout" but does not actually implement it, impeding the
      controller initialization.
      
      Add the quirk HCI_QUIRK_BROKEN_SET_RPA_TIMEOUT to unblock the controller
      initialization.
      
      < HCI Command: LE Set Resolvable Private... (0x08|0x002e) plen 2
              Timeout: 900 seconds
      > HCI Event: Command Status (0x0f) plen 4
            LE Set Resolvable Private Address Timeout (0x08|0x002e) ncmd 1
              Status: Unknown HCI Command (0x01)
      Co-developed-by: Nimoc <wzj9912@gmail.com>
      Signed-off-by: Nimoc <wzj9912@gmail.com>
      Signed-off-by: NRaul Cheleguini <raul.cheleguini@gmail.com>
      Signed-off-by: NLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
      91b6d02d