]> git.ipfire.org Git - thirdparty/linux.git/commit
Input: lkkbd - disable pending work before freeing device
authorMinseong Kim <ii4gsp@gmail.com>
Fri, 12 Dec 2025 08:29:23 +0000 (00:29 -0800)
committerDmitry Torokhov <dmitry.torokhov@gmail.com>
Fri, 12 Dec 2025 08:45:23 +0000 (00:45 -0800)
commite58c88f0cb2d8ed89de78f6f17409d29cfab6c5c
treeea5e069149e6d5adffcdfe3ddf73af64f02a3251
parent429c4727011ead99129b14dc9ff4c87a747a50ab
Input: lkkbd - disable pending work before freeing device

lkkbd_interrupt() schedules lk->tq via schedule_work(), and the work
handler lkkbd_reinit() dereferences the lkkbd structure and its
serio/input_dev fields.

lkkbd_disconnect() and error paths in lkkbd_connect() free the lkkbd
structure without preventing the reinit work from being queued again
until serio_close() returns. This can allow the work handler to run
after the structure has been freed, leading to a potential use-after-free.

Use disable_work_sync() instead of cancel_work_sync() to ensure the
reinit work cannot be re-queued, and call it both in lkkbd_disconnect()
and in lkkbd_connect() error paths after serio_open().

Signed-off-by: Minseong Kim <ii4gsp@gmail.com>
Cc: stable@vger.kernel.org
Link: https://patch.msgid.link/20251212052314.16139-1-ii4gsp@gmail.com
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
drivers/input/keyboard/lkkbd.c