Message ID | 9e599978852f9a2f30f9523edfd220dd1e25aa63.1716735907.git.christophe.jaillet@wanadoo.fr |
---|---|
State | Accepted |
Commit | 655a8a7684b897721f87c59798fd04d8b79f1b69 |
Headers | show |
Series | HID: nintendo: Fix an error handling path in nintendo_hid_probe() | expand |
On Sun, 26 May 2024, Christophe JAILLET wrote: > 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: 5307de63d71d ("HID: nintendo: use ida for LED player id") > Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr> Applied, thanks.
diff --git a/drivers/hid/hid-nintendo.c b/drivers/hid/hid-nintendo.c index b4a97803eca3..3062daf68d31 100644 --- a/drivers/hid/hid-nintendo.c +++ b/drivers/hid/hid-nintendo.c @@ -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:
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: 5307de63d71d ("HID: nintendo: use ida for LED player id") Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr> --- drivers/hid/hid-nintendo.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)