[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: Kyle McMartin <kyle@parisc-linux.org>

authored by

Kyle McMartin and committed by
Kyle McMartin
cd7a9202 4da9f131

+2 -5
+1 -2
drivers/input/keyboard/hil_kbd.c
··· 240 return; 241 } 242 243 - input_unregister_device(kbd->dev); 244 serio_close(serio); 245 - input_free_device(kbd->dev); 246 kfree(kbd); 247 } 248
··· 240 return; 241 } 242 243 serio_close(serio); 244 + input_unregister_device(kbd->dev); 245 kfree(kbd); 246 } 247
-1
drivers/input/keyboard/hilkbd.c
··· 334 335 input_unregister_device(hil_dev.dev); 336 337 - input_free_device(hil_dev.dev); 338 hil_dev.dev = NULL; 339 340 #if defined(CONFIG_PARISC)
··· 334 335 input_unregister_device(hil_dev.dev); 336 337 hil_dev.dev = NULL; 338 339 #if defined(CONFIG_PARISC)
+1 -2
drivers/input/mouse/hil_ptr.c
··· 233 return; 234 } 235 236 - input_unregister_device(ptr->dev); 237 serio_close(serio); 238 - input_free_device(ptr->dev); 239 kfree(ptr); 240 } 241
··· 233 return; 234 } 235 236 serio_close(serio); 237 + input_unregister_device(ptr->dev); 238 kfree(ptr); 239 } 240