Input: gpio-keys - fix possible concurrent access in gpio_keys_irq_timer()
commit 8f38219fa139623c29db2cb0f17d0a197a86e344 upstream.
gpio_keys_irq_isr() and gpio_keys_irq_timer() access the same resources.
There could be a concurrent access if a GPIO interrupt occurs in parallel
of a HR timer interrupt.
Guard back those resources with a spinlock.
Fixes: 019002f20c ("Input: gpio-keys - use hrtimer for release timer")
Signed-off-by: Gatien Chevallier <gatien.chevallier@foss.st.com>
Link: https://lore.kernel.org/r/20250528-gpio_keys_preempt_rt-v2-2-3fc55a9c3619@foss.st.com
Cc: stable@vger.kernel.org
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
5a8cd6ae83
commit
a0b1c91ada
@@ -449,6 +449,8 @@ static enum hrtimer_restart gpio_keys_irq_timer(struct hrtimer *t)
|
|||||||
release_timer);
|
release_timer);
|
||||||
struct input_dev *input = bdata->input;
|
struct input_dev *input = bdata->input;
|
||||||
|
|
||||||
|
guard(spinlock_irqsave)(&bdata->lock);
|
||||||
|
|
||||||
if (bdata->key_pressed) {
|
if (bdata->key_pressed) {
|
||||||
input_report_key(input, *bdata->code, 0);
|
input_report_key(input, *bdata->code, 0);
|
||||||
input_sync(input);
|
input_sync(input);
|
||||||
|
|||||||
Reference in New Issue
Block a user