mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-04 04:02:26 +00:00
HID: nintendo: Fix an error handling path in nintendo_hid_probe()
joycon_leds_create() has a ida_alloc() call. So if an error occurs after
it, a corresponding ida_free() call is needed, as already done in the
.remove function.
This is not 100% perfect, because if ida_alloc() fails, then
'ctlr->player_id' will forced to be U32_MAX, and an error will be logged
when ida_free() is called.
Considering that this can't happen in real life, no special handling is
done to handle it.
Fixes: 5307de63d7
("HID: nintendo: use ida for LED player id")
Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Reviewed-by: Silvan Jegen <s.jegen@gmail.com>
Signed-off-by: Jiri Kosina <jkosina@suse.com>
This commit is contained in:
parent
ce3af2ee95
commit
655a8a7684
@ -2725,13 +2725,13 @@ static int nintendo_hid_probe(struct hid_device *hdev,
|
||||
ret = joycon_power_supply_create(ctlr);
|
||||
if (ret) {
|
||||
hid_err(hdev, "Failed to create power_supply; ret=%d\n", ret);
|
||||
goto err_close;
|
||||
goto err_ida;
|
||||
}
|
||||
|
||||
ret = joycon_input_create(ctlr);
|
||||
if (ret) {
|
||||
hid_err(hdev, "Failed to create input device; ret=%d\n", ret);
|
||||
goto err_close;
|
||||
goto err_ida;
|
||||
}
|
||||
|
||||
ctlr->ctlr_state = JOYCON_CTLR_STATE_READ;
|
||||
@ -2739,6 +2739,8 @@ static int nintendo_hid_probe(struct hid_device *hdev,
|
||||
hid_dbg(hdev, "probe - success\n");
|
||||
return 0;
|
||||
|
||||
err_ida:
|
||||
ida_free(&nintendo_player_id_allocator, ctlr->player_id);
|
||||
err_close:
|
||||
hid_hw_close(hdev);
|
||||
err_stop:
|
||||
|
Loading…
Reference in New Issue
Block a user