Staging: ste_rmi4: use after input_unregister_device()

The original code called input_free_device(rmi4_data->input_dev) after
input_unregister_device(rmi4_data->input_dev) and that's a double free.
This is described in the comments to input_unregister_device().

The normal way to handle this is to make input_register_device() the
last function in the probe which can fail. That way you can avoid the
call to input_unregister_device() entirely.

Signed-off-by: Dan Carpenter <error27@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

authored by

Dan Carpenter and committed by
Greg Kroah-Hartman
f32b8453 64911e4b

+9 -10
+9 -10
drivers/staging/ste_rmi4/synaptics_i2c_rmi4.c
··· 986 input_set_abs_params(rmi4_data->input_dev, ABS_MT_TOUCH_MAJOR, 0, 987 MAX_TOUCH_MAJOR, 0, 0); 988 989 - retval = input_register_device(rmi4_data->input_dev); 990 - if (retval) { 991 - dev_err(&client->dev, "%s:input register failed\n", __func__); 992 - goto err_input_register; 993 - } 994 - 995 /* Clear interrupts */ 996 synaptics_rmi4_i2c_block_read(rmi4_data, 997 rmi4_data->fn01_data_base_addr + 1, intr_status, ··· 997 if (retval) { 998 dev_err(&client->dev, "%s:Unable to get attn irq %d\n", 999 __func__, platformdata->irq_number); 1000 - goto err_request_irq; 1001 } 1002 1003 return retval; 1004 1005 - err_request_irq: 1006 free_irq(platformdata->irq_number, rmi4_data); 1007 - input_unregister_device(rmi4_data->input_dev); 1008 - err_input_register: 1009 i2c_set_clientdata(client, NULL); 1010 err_query_dev: 1011 if (platformdata->regulator_en) {
··· 986 input_set_abs_params(rmi4_data->input_dev, ABS_MT_TOUCH_MAJOR, 0, 987 MAX_TOUCH_MAJOR, 0, 0); 988 989 /* Clear interrupts */ 990 synaptics_rmi4_i2c_block_read(rmi4_data, 991 rmi4_data->fn01_data_base_addr + 1, intr_status, ··· 1003 if (retval) { 1004 dev_err(&client->dev, "%s:Unable to get attn irq %d\n", 1005 __func__, platformdata->irq_number); 1006 + goto err_unset_clientdata; 1007 + } 1008 + 1009 + retval = input_register_device(rmi4_data->input_dev); 1010 + if (retval) { 1011 + dev_err(&client->dev, "%s:input register failed\n", __func__); 1012 + goto err_free_irq; 1013 } 1014 1015 return retval; 1016 1017 + err_free_irq: 1018 free_irq(platformdata->irq_number, rmi4_data); 1019 + err_unset_clientdata: 1020 i2c_set_clientdata(client, NULL); 1021 err_query_dev: 1022 if (platformdata->regulator_en) {