Commit 655a8a76 authored by Christophe JAILLET's avatar Christophe JAILLET Committed by Jiri Kosina

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: 5307de63 ("HID: nintendo: use ida for LED player id")
Signed-off-by: default avatarChristophe JAILLET <christophe.jaillet@wanadoo.fr>
Reviewed-by: default avatarSilvan Jegen <s.jegen@gmail.com>
Signed-off-by: default avatarJiri Kosina <jkosina@suse.com>
parent ce3af2ee
...@@ -2725,13 +2725,13 @@ static int nintendo_hid_probe(struct hid_device *hdev, ...@@ -2725,13 +2725,13 @@ static int nintendo_hid_probe(struct hid_device *hdev,
ret = joycon_power_supply_create(ctlr); ret = joycon_power_supply_create(ctlr);
if (ret) { if (ret) {
hid_err(hdev, "Failed to create power_supply; ret=%d\n", ret); hid_err(hdev, "Failed to create power_supply; ret=%d\n", ret);
goto err_close; goto err_ida;
} }
ret = joycon_input_create(ctlr); ret = joycon_input_create(ctlr);
if (ret) { if (ret) {
hid_err(hdev, "Failed to create input device; ret=%d\n", 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; ctlr->ctlr_state = JOYCON_CTLR_STATE_READ;
...@@ -2739,6 +2739,8 @@ static int nintendo_hid_probe(struct hid_device *hdev, ...@@ -2739,6 +2739,8 @@ static int nintendo_hid_probe(struct hid_device *hdev,
hid_dbg(hdev, "probe - success\n"); hid_dbg(hdev, "probe - success\n");
return 0; return 0;
err_ida:
ida_free(&nintendo_player_id_allocator, ctlr->player_id);
err_close: err_close:
hid_hw_close(hdev); hid_hw_close(hdev);
err_stop: err_stop:
......
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