lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CABBYNZJ62dw0JHTrNK7xe9_kO61_gH9+XGPm+UEWw4CGRVCnnQ@mail.gmail.com>
Date: Fri, 20 Sep 2024 10:54:52 -0400
From: Luiz Augusto von Dentz <luiz.dentz@...il.com>
To: Chris Lu <chris.lu@...iatek.com>
Cc: Marcel Holtmann <marcel@...tmann.org>, Johan Hedberg <johan.hedberg@...il.com>, 
	Sean Wang <sean.wang@...iatek.com>, Aaron Hou <aaron.hou@...iatek.com>, 
	Steve Lee <steve.lee@...iatek.com>, linux-bluetooth <linux-bluetooth@...r.kernel.org>, 
	linux-kernel <linux-kernel@...r.kernel.org>, 
	linux-mediatek <linux-mediatek@...ts.infradead.org>
Subject: Re: [PATCH v2 3/4] Bluetooth: btusb: mediatek: add intf release flow
 when usb disconnect

Hi Chris,

On Thu, Sep 19, 2024 at 3:49 AM Chris Lu <chris.lu@...iatek.com> wrote:
>
> MediaTek claim an special usb intr interface for ISO data transmission.
> The interface need to be released before unregistering hci device when
> usb disconnect. Removing BT usb dongle without properly releasing the
> interface may cause Kernel panic while unregister hci device.
>
> Signed-off-by: Chris Lu <chris.lu@...iatek.com>
> ---
>  drivers/bluetooth/btusb.c | 12 +++++++-----
>  1 file changed, 7 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
> index dfc42bdc8aaf..37e67b451b34 100644
> --- a/drivers/bluetooth/btusb.c
> +++ b/drivers/bluetooth/btusb.c
> @@ -2614,9 +2614,9 @@ static void btusb_mtk_claim_iso_intf(struct btusb_data *data)
>         set_bit(BTMTK_ISOPKT_OVER_INTR, &btmtk_data->flags);
>  }
>
> -static void btusb_mtk_release_iso_intf(struct btusb_data *data)
> +static int btusb_mtk_release_iso_intf(struct hci_dev *hdev)
>  {
> -       struct btmtk_data *btmtk_data = hci_get_priv(data->hdev);
> +       struct btmtk_data *btmtk_data = hci_get_priv(hdev);
>
>         if (btmtk_data->isopkt_intf) {
>                 usb_kill_anchored_urbs(&btmtk_data->isopkt_anchor);
> @@ -2630,6 +2630,8 @@ static void btusb_mtk_release_iso_intf(struct btusb_data *data)
>         }
>
>         clear_bit(BTMTK_ISOPKT_OVER_INTR, &btmtk_data->flags);
> +
> +       return 0;
>  }
>
>  static int btusb_mtk_reset(struct hci_dev *hdev, void *rst_data)
> @@ -2649,7 +2651,7 @@ static int btusb_mtk_reset(struct hci_dev *hdev, void *rst_data)
>                 return err;
>
>         if (test_bit(BTMTK_ISOPKT_RUNNING, &btmtk_data->flags))
> -               btusb_mtk_release_iso_intf(data);
> +               btusb_mtk_release_iso_intf(hdev);

We can probably move the check for BTMTK_ISOPKT_RUNNING into
btusb_mtk_release_iso_intf to avoid having to duplicate it whenever
calling btusb_mtk_release_iso_intf.

>
>         btusb_stop_traffic(data);
>         usb_kill_anchored_urbs(&data->tx_anchor);
> @@ -2703,14 +2705,13 @@ static int btusb_mtk_setup(struct hci_dev *hdev)
>
>  static int btusb_mtk_shutdown(struct hci_dev *hdev)
>  {
> -       struct btusb_data *data = hci_get_drvdata(hdev);
>         struct btmtk_data *btmtk_data = hci_get_priv(hdev);
>         int ret;
>
>         ret = btmtk_usb_shutdown(hdev);
>
>         if (test_bit(BTMTK_ISOPKT_RUNNING, &btmtk_data->flags))
> -               btusb_mtk_release_iso_intf(data);
> +               btusb_mtk_release_iso_intf(hdev);

Ditto.

>         return ret;
>  }
> @@ -3824,6 +3825,7 @@ static int btusb_probe(struct usb_interface *intf,
>                 data->recv_acl = btmtk_usb_recv_acl;
>                 data->suspend = btmtk_usb_suspend;
>                 data->resume = btmtk_usb_resume;
> +               data->disconnect = btusb_mtk_release_iso_intf;

I'd wrap (e.g. btmtk_usb_disconnect) the call to
btusb_mtk_release_iso_intf since that is only meant to release the ISO
endpoint.

>         }
>
>         if (id->driver_info & BTUSB_SWAVE) {
> --
> 2.18.0
>


-- 
Luiz Augusto von Dentz

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ