Thread (8 messages) 8 messages, 4 authors, 2016-02-26

Re: Fake KEY_5 continuous keydown events with Logitech wireless keyboard on Kernel 4.2

From: Benjamin Tissoires <hidden>
Date: 2015-11-09 10:36:41

On Sat, Nov 7, 2015 at 6:22 PM, Mauro Carvalho Chehab
[off-list ref] wrote:
Em Fri, 06 Nov 2015 17:37:55 +0100
Benjamin Tissoires [off-list ref] escreveu:
quoted
HI Mauro,

On Fri, Nov 6, 2015 at 2:50 PM, Mauro Carvalho Chehab
[off-list ref] wrote:
quoted
Hi Dmitry,

Since I upgraded my desktop to Fedora 23 (with comes with Kernel 4.2.5), I'm
noticing a weird bug... from time to time, it starts producing an endless
sequence of KEY_5 events.

I opened a bug at Fedora:
        https://bugzilla.redhat.com/show_bug.cgi?id=1278818

But I suspect it could be some Kernel bug. Do you know if some change
between 4.1 and 4.2 might have triggered such bug?
I don't think any changes in 4.2 would trigger that. The only
hid-logitech-hidpp change in 4.2 is unrelated to this particular
keyboard and I don't think it could interfere with other devices than
the M560.

I also experienced such problems from time to time and always thought
it was either a firmware problem or a low battery issue. When
recharging my keyboard, the issue disappeared. Unfortunately, I was
never able to figure out which HID raw event triggered this kernel key
repeat (as you said, it's random).

Now that I think of it, I might have a reproducer here. When playing
with libratbag to configure the MX Master, I receive from time to time
some key events while no keys should be sent by the mouse. I suspect
that the HID parsing convert some internal protocol events into HID
keys and generate spurious keys. I'll check on this.

If you can manage to reproduce your issue more often (for me, this
happens once in a month or so), I'd be curious to check the HID raw
events coming out from the keyboard just before the bug, and what
triggers the bug.
I'd be glad if you could do a recording with hid-record (from
hid-replay[1]). Make sure that the logs do not contain sensitive
information:
You can parse the output of the raw events by using
./tools/parse_hid.py in the hid-replay repository. Recording at the
Unifying receiver level should give a bunch of HID reports
encapsulated in the DJ protocol so parse_hid will not be able to parse
them accurately. If you register the keyboard node, parse_hid.py
should accurately translate the raw events to a human description of
the report which should allow you to strip the sensitive data.
Parsed hid for the keyboard for
        /dev/hidraw2:   Logitech K520
follows:
Thanks for the logs. I am somewhat puzzled by it:
 68.090688 ReportID: 1 / LeftControl: 0 | LeftShift: 0 | LeftAlt: 0 | Left GUI: 0 | RightControl: 0 | RightShift: 0 | RightAlt: 0 | Right GUI: 0 |Keyboard [Return (ENTER), 00, 00, 00, 00, 00]
 68.170687 ReportID: 1 / LeftControl: 0 | LeftShift: 0 | LeftAlt: 0 | Left GUI: 0 | RightControl: 0 | RightShift: 0 | RightAlt: 0 | Right GUI: 0 |Keyboard [00, 00, 00, 00, 00, 00]
177.191904 ReportID: 16 /Vendor Defined Page 1 [02, 81, 07, 07, 00, 00]
This is an answer from a query to the battery status (upower) -> the
battery is full
297.115254 ReportID: 16 /Vendor Defined Page 1 [02, 81, 07, 07, 00, 00]
ditto
367.914151 ReportID: 16 /Vendor Defined Page 1 [02, 41, 04, 71, 11, 20]
the device goes in suspend
367.916051 ReportID: 1 / LeftControl: 0 | LeftShift: 0 | LeftAlt: 0 | Left GUI: 0 | RightControl: 0 | RightShift: 0 | RightAlt: 0 | Right GUI: 0 |Keyboard [00, 00, 00, 00, 00, 00]
367.916062 ReportID: 3 /Consumer Devices [, ]
367.916067 ReportID: 4 /Generic Desktop [] | #
hid-logitech-dj releases all keys following a suspend
416.840646 ReportID: 16 /Vendor Defined Page 1 [02, 8f, 81, 07, 09, 00]
upower tries to read the battery status, and fails with error
HIDPP10_ERROR_CODE_RESOURCE_ERROR (device disconnected).

I suppose the fake KEY_5 started around here. Did you stripped out any
events here?
476.573316 ReportID: 16 /Vendor Defined Page 1 [02, 41, 04, b1, 11, 20]
The device gets reconnected by your key press.
476.577354 ReportID: 1 / LeftControl: 0 | LeftShift: 0 | LeftAlt: 0 | Left GUI: 0 | RightControl: 0 | RightShift: 0 | RightAlt: 0 | Right GUI: 0 |Keyboard [DELETE (Backspace), 00, 00, 00, 00, 00]
476.671297 ReportID: 1 / LeftControl: 0 | LeftShift: 0 | LeftAlt: 0 | Left GUI: 0 | RightControl: 0 | RightShift: 0 | RightAlt: 0 | Right GUI: 0 |Keyboard [00, 00, 00, 00, 00, 00]
DEL is pressed/released, which clears the map of currently pressed
keys and remove the auto-repeat on KEY_5...
I used the DEL key to delete the sequence of "5" that appeared there.

Please let me know if the above helps, of if I need to parse also the
mouse events.
Given this, the keyboard doesn't seems to generate wrong events that
are interpreted by HID as a KEY_5 press without release.

I hope the mouse does not trigger a bug in the driver that makes the
keyboard driver to send spurious key presses... I'll try to look
deeper, but please give me an approximate time you observed the
autorepeat before hitting DEL (~60 secs, or less?).

Cheers,
Benjamin
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help