2019-06-14 15:32:02

by Bastien Nocera

[permalink] [raw]
Subject: [PATCH] input/hog: Remove HID device after HoG device disconnects

From: Benjamin Tissoires <[email protected]>

When the Bluetooth LE device disconnects, make sure to also destroy the
uHID device so that we don't have a lingering HID device accessible from
user-space.

This also fixes the input subsystem never seeing the device reattaching,
causing settings that should be applied on connection not to be applied.

https://bugzilla.kernel.org/show_bug.cgi?id=202909

Tested-by: Bastien Nocera <[email protected]>
---
profiles/input/hog.c | 2 ++
1 file changed, 2 insertions(+)

diff --git a/profiles/input/hog.c b/profiles/input/hog.c
index 23c9c1529..83c017dcb 100644
--- a/profiles/input/hog.c
+++ b/profiles/input/hog.c
@@ -199,6 +199,8 @@ static int hog_disconnect(struct btd_service *service)
struct hog_device *dev = btd_service_get_user_data(service);

bt_hog_detach(dev->hog);
+ bt_hog_unref(dev->hog);
+ dev->hog = NULL;

btd_service_disconnecting_complete(service, 0);

--
2.21.0


2019-07-15 12:52:22

by Szymon Janc

[permalink] [raw]
Subject: Re: [PATCH] input/hog: Remove HID device after HoG device disconnects

Hi,

On Friday, 14 June 2019 17:31:25 CEST Bastien Nocera wrote:
> From: Benjamin Tissoires <[email protected]>
>
> When the Bluetooth LE device disconnects, make sure to also destroy the
> uHID device so that we don't have a lingering HID device accessible from
> user-space.
>
> This also fixes the input subsystem never seeing the device reattaching,
> causing settings that should be applied on connection not to be applied.
>
> https://bugzilla.kernel.org/show_bug.cgi?id=202909
>
> Tested-by: Bastien Nocera <[email protected]>
> ---
> profiles/input/hog.c | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/profiles/input/hog.c b/profiles/input/hog.c
> index 23c9c1529..83c017dcb 100644
> --- a/profiles/input/hog.c
> +++ b/profiles/input/hog.c
> @@ -199,6 +199,8 @@ static int hog_disconnect(struct btd_service *service)
> struct hog_device *dev = btd_service_get_user_data(service);
>
> bt_hog_detach(dev->hog);
> + bt_hog_unref(dev->hog);
> + dev->hog = NULL;
>
> btd_service_disconnecting_complete(service, 0);

I've tested this with device I have and introduced delay is acceptable imho.
Since this fix end-user usabiblity for some of the devices on the market I
think the trade-off is justified.

Patch is now applied.

--
pozdrawiam
Szymon Janc