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 986 input_set_abs_params(rmi4_data->input_dev, ABS_MT_TOUCH_MAJOR, 0, 987 987 MAX_TOUCH_MAJOR, 0, 0); 988 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 989 /* Clear interrupts */ 996 990 synaptics_rmi4_i2c_block_read(rmi4_data, 997 991 rmi4_data->fn01_data_base_addr + 1, intr_status, ··· 997 1003 if (retval) { 998 1004 dev_err(&client->dev, "%s:Unable to get attn irq %d\n", 999 1005 __func__, platformdata->irq_number); 1000 - goto err_request_irq; 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; 1001 1013 } 1002 1014 1003 1015 return retval; 1004 1016 1005 - err_request_irq: 1017 + err_free_irq: 1006 1018 free_irq(platformdata->irq_number, rmi4_data); 1007 - input_unregister_device(rmi4_data->input_dev); 1008 - err_input_register: 1019 + err_unset_clientdata: 1009 1020 i2c_set_clientdata(client, NULL); 1010 1021 err_query_dev: 1011 1022 if (platformdata->regulator_en) {