Commit 493a7e0d authored by Dmitry Torokhov's avatar Dmitry Torokhov

Input: fix input_free_device() implementation

input_free_device can't just call kfree because if input_register_device
fails after successfully registering corresponding class device there
is a chance that someone could get a reference to it. We need to use
input_put_device() to make sure that we don't delete input device until
last reference to it was dropped.
Signed-off-by: default avatarDmitry Torokhov <dtor@mail.ru>
parent 58a343f2
...@@ -421,7 +421,7 @@ struct input_absinfo { ...@@ -421,7 +421,7 @@ struct input_absinfo {
#define BTN_GEAR_UP 0x151 #define BTN_GEAR_UP 0x151
#define KEY_OK 0x160 #define KEY_OK 0x160
#define KEY_SELECT 0x161 #define KEY_SELECT 0x161
#define KEY_GOTO 0x162 #define KEY_GOTO 0x162
#define KEY_CLEAR 0x163 #define KEY_CLEAR 0x163
#define KEY_POWER2 0x164 #define KEY_POWER2 0x164
...@@ -995,11 +995,6 @@ static inline void init_input_dev(struct input_dev *dev) ...@@ -995,11 +995,6 @@ static inline void init_input_dev(struct input_dev *dev)
struct input_dev *input_allocate_device(void); struct input_dev *input_allocate_device(void);
static inline void input_free_device(struct input_dev *dev)
{
kfree(dev);
}
static inline struct input_dev *input_get_device(struct input_dev *dev) static inline struct input_dev *input_get_device(struct input_dev *dev)
{ {
return to_input_dev(class_device_get(&dev->cdev)); return to_input_dev(class_device_get(&dev->cdev));
...@@ -1010,6 +1005,11 @@ static inline void input_put_device(struct input_dev *dev) ...@@ -1010,6 +1005,11 @@ static inline void input_put_device(struct input_dev *dev)
class_device_put(&dev->cdev); class_device_put(&dev->cdev);
} }
static inline void input_free_device(struct input_dev *dev)
{
input_put_device(dev);
}
int input_register_device(struct input_dev *); int input_register_device(struct input_dev *);
void input_unregister_device(struct input_dev *); void input_unregister_device(struct input_dev *);
......
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