Commit cd7a9202 authored by Kyle McMartin's avatar Kyle McMartin Committed by Kyle McMartin

[PARISC] Fix double free when removing HIL drivers

On Thu, Mar 30, 2006 at 08:31:02AM -0500, Dmitry Torokhov wrote:
> Don't do that, its double free. input_unregister_device() normally
> causes release() to be called and free the device. input_free_device
> is only to be called when input_register_device has not been called or
> failed.
>
> Plus you might want to unregister device after closing serio port,
> otherwise your interrupt routine might be referencing already freed
> memory.
Signed-off-by: default avatarKyle McMartin <kyle@parisc-linux.org>
parent 4da9f131
...@@ -240,9 +240,8 @@ static void hil_kbd_disconnect(struct serio *serio) ...@@ -240,9 +240,8 @@ static void hil_kbd_disconnect(struct serio *serio)
return; return;
} }
input_unregister_device(kbd->dev);
serio_close(serio); serio_close(serio);
input_free_device(kbd->dev); input_unregister_device(kbd->dev);
kfree(kbd); kfree(kbd);
} }
......
...@@ -334,7 +334,6 @@ static void __exit hil_exit(void) ...@@ -334,7 +334,6 @@ static void __exit hil_exit(void)
input_unregister_device(hil_dev.dev); input_unregister_device(hil_dev.dev);
input_free_device(hil_dev.dev);
hil_dev.dev = NULL; hil_dev.dev = NULL;
#if defined(CONFIG_PARISC) #if defined(CONFIG_PARISC)
......
...@@ -233,9 +233,8 @@ static void hil_ptr_disconnect(struct serio *serio) ...@@ -233,9 +233,8 @@ static void hil_ptr_disconnect(struct serio *serio)
return; return;
} }
input_unregister_device(ptr->dev);
serio_close(serio); serio_close(serio);
input_free_device(ptr->dev); input_unregister_device(ptr->dev);
kfree(ptr); kfree(ptr);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment