提交 368d290b 编写于 作者: D Dirk Hohndel 提交者: Jiri Kosina

HID: fix hidinput_connect ignoring retval from input_register_device

hidinput_connect() ignores retval from input_register_device(). Fix it
by properly undoing all the registrations that have been already done,
and return error.
Signed-off-by: NDirk Hohndel <hohndel@linux.intel.com>
Signed-off-by: NJiri Kosina <jkosina@suse.cz>
上级 d624284b
......@@ -1152,7 +1152,7 @@ int hidinput_connect(struct hid_device *hid)
kfree(hidinput);
input_free_device(input_dev);
err_hid("Out of memory during hid input probe");
return -1;
goto out_unwind;
}
input_set_drvdata(input_dev, hid);
......@@ -1186,15 +1186,25 @@ int hidinput_connect(struct hid_device *hid)
* UGCI) cram a lot of unrelated inputs into the
* same interface. */
hidinput->report = report;
input_register_device(hidinput->input);
if (input_register_device(hidinput->input))
goto out_cleanup;
hidinput = NULL;
}
}
if (hidinput)
input_register_device(hidinput->input);
if (hidinput && input_register_device(hidinput->input))
goto out_cleanup;
return 0;
out_cleanup:
input_free_device(hidinput->input);
kfree(hidinput);
out_unwind:
/* unwind the ones we already registered */
hidinput_disconnect(hid);
return -1;
}
EXPORT_SYMBOL_GPL(hidinput_connect);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册