Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 33143ea1 authored by Dmitry Torokhov's avatar Dmitry Torokhov
Browse files

Input: serio - take drv_mutex in serio_cleanup()



We need to take serio->drv_mutex in serio_cleanup() to prevent the
function from being called while driver is in the middle of attaching
to a serio port. Such situation can happen with i8042 and atkbd drivers
if user rapidly presses Ctrl-Alt-Del during system startup, and leads
to kernel oops.

Reported-by: default avatarDave Young <hidave.darkstar@gmail.com>
Signed-off-by: default avatarDmitry Torokhov <dtor@mail.ru>
parent 9f7a60d6
Loading
Loading
Loading
Loading
+2 −0
Original line number Original line Diff line number Diff line
@@ -769,8 +769,10 @@ static int serio_driver_remove(struct device *dev)


static void serio_cleanup(struct serio *serio)
static void serio_cleanup(struct serio *serio)
{
{
	mutex_lock(&serio->drv_mutex);
	if (serio->drv && serio->drv->cleanup)
	if (serio->drv && serio->drv->cleanup)
		serio->drv->cleanup(serio);
		serio->drv->cleanup(serio);
	mutex_unlock(&serio->drv_mutex);
}
}


static void serio_shutdown(struct device *dev)
static void serio_shutdown(struct device *dev)