Input: make sure input interfaces pin parent input devices

Recent driver core change causes references to parent devices being
dropped early, at device_del() time, as opposed to when all children
are freed. This causes oops in evdev with grabbed devices. Take the
reference to the parent input device ourselves to ensure that it
stays around long enough.

Signed-off-by: Dmitry Torokhov <dtor@mail.ru>

+9 -8
+2 -4
drivers/input/evdev.c
··· 124 { 125 struct evdev *evdev = container_of(dev, struct evdev, dev); 126 127 kfree(evdev); 128 } 129 ··· 854 evdev_hangup(evdev); 855 evdev_remove_chrdev(evdev); 856 857 - if (evdev->grab) 858 - evdev_ungrab(evdev, evdev->grab); 859 - 860 /* evdev is marked dead so no one else accesses evdev->open */ 861 if (evdev->open) { 862 input_flush_device(handle, NULL); ··· 894 evdev->exist = 1; 895 evdev->minor = minor; 896 897 - evdev->handle.dev = dev; 898 evdev->handle.name = evdev->name; 899 evdev->handle.handler = handler; 900 evdev->handle.private = evdev;
··· 124 { 125 struct evdev *evdev = container_of(dev, struct evdev, dev); 126 127 + input_put_device(evdev->handle.dev); 128 kfree(evdev); 129 } 130 ··· 853 evdev_hangup(evdev); 854 evdev_remove_chrdev(evdev); 855 856 /* evdev is marked dead so no one else accesses evdev->open */ 857 if (evdev->open) { 858 input_flush_device(handle, NULL); ··· 896 evdev->exist = 1; 897 evdev->minor = minor; 898 899 + evdev->handle.dev = input_get_device(dev); 900 evdev->handle.name = evdev->name; 901 evdev->handle.handler = handler; 902 evdev->handle.private = evdev;
+2 -1
drivers/input/joydev.c
··· 171 { 172 struct joydev *joydev = container_of(dev, struct joydev, dev); 173 174 kfree(joydev); 175 } 176 ··· 751 joydev->minor = minor; 752 753 joydev->exist = 1; 754 - joydev->handle.dev = dev; 755 joydev->handle.name = joydev->name; 756 joydev->handle.handler = handler; 757 joydev->handle.private = joydev;
··· 171 { 172 struct joydev *joydev = container_of(dev, struct joydev, dev); 173 174 + input_put_device(joydev->handle.dev); 175 kfree(joydev); 176 } 177 ··· 750 joydev->minor = minor; 751 752 joydev->exist = 1; 753 + joydev->handle.dev = input_get_device(dev); 754 joydev->handle.name = joydev->name; 755 joydev->handle.handler = handler; 756 joydev->handle.private = joydev;
+2 -1
drivers/input/mousedev.c
··· 414 { 415 struct mousedev *mousedev = container_of(dev, struct mousedev, dev); 416 417 kfree(mousedev); 418 } 419 ··· 866 867 mousedev->minor = minor; 868 mousedev->exist = 1; 869 - mousedev->handle.dev = dev; 870 mousedev->handle.name = mousedev->name; 871 mousedev->handle.handler = handler; 872 mousedev->handle.private = mousedev;
··· 414 { 415 struct mousedev *mousedev = container_of(dev, struct mousedev, dev); 416 417 + input_put_device(mousedev->handle.dev); 418 kfree(mousedev); 419 } 420 ··· 865 866 mousedev->minor = minor; 867 mousedev->exist = 1; 868 + mousedev->handle.dev = input_get_device(dev); 869 mousedev->handle.name = mousedev->name; 870 mousedev->handle.handler = handler; 871 mousedev->handle.private = mousedev;
+3 -2
include/linux/input.h
··· 1227 1228 static inline struct input_dev *input_get_device(struct input_dev *dev) 1229 { 1230 - return to_input_dev(get_device(&dev->dev)); 1231 } 1232 1233 static inline void input_put_device(struct input_dev *dev) 1234 { 1235 - put_device(&dev->dev); 1236 } 1237 1238 static inline void *input_get_drvdata(struct input_dev *dev)
··· 1227 1228 static inline struct input_dev *input_get_device(struct input_dev *dev) 1229 { 1230 + return dev ? to_input_dev(get_device(&dev->dev)) : NULL; 1231 } 1232 1233 static inline void input_put_device(struct input_dev *dev) 1234 { 1235 + if (dev) 1236 + put_device(&dev->dev); 1237 } 1238 1239 static inline void *input_get_drvdata(struct input_dev *dev)