2015-07-09 21:33:33

by Dmitry Torokhov

[permalink] [raw]
Subject: [PATCH] HID: input: call input_sync() when automatically releasing a key

We need to emit EV_SYN/SYN_REPORT between key press and release, otherwise
userspace is allowed to "swallow" the event.

Signed-off-by: Dmitry Torokhov <[email protected]>
---

Observed this with Plantronics headsets...

drivers/hid/hid-input.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/drivers/hid/hid-input.c b/drivers/hid/hid-input.c
index 008e89b..50caf14 100644
--- a/drivers/hid/hid-input.c
+++ b/drivers/hid/hid-input.c
@@ -1162,8 +1162,11 @@ void hidinput_hid_event(struct hid_device *hid, struct hid_field *field, struct

input_event(input, usage->type, usage->code, value);

- if ((field->flags & HID_MAIN_ITEM_RELATIVE) && (usage->type == EV_KEY))
+ if ((field->flags & HID_MAIN_ITEM_RELATIVE) &&
+ usage->type == EV_KEY && value) {
+ input_sync(input);
input_event(input, usage->type, usage->code, 0);
+ }
}

void hidinput_report_event(struct hid_device *hid, struct hid_report *report)
--
2.4.3.573.g4eafbef


--
Dmitry


2015-07-10 09:36:10

by Jiri Kosina

[permalink] [raw]
Subject: Re: [PATCH] HID: input: call input_sync() when automatically releasing a key

On Thu, 9 Jul 2015, Dmitry Torokhov wrote:

> We need to emit EV_SYN/SYN_REPORT between key press and release, otherwise
> userspace is allowed to "swallow" the event.
>
> Signed-off-by: Dmitry Torokhov <[email protected]>

I've applied this to for-4.3/upstream.

Thanks,

--
Jiri Kosina
SUSE Labs