mirror of
https://github.com/torvalds/linux.git
synced 2026-11-07 06:17:02 +01:00
gpiolib: Free chip resources when allocating the label fails
If desc_set_label() fails after the chip's request callback succeeds,
gpiod_request_commit() clears GPIOD_FLAG_REQUESTED without calling the
free callback. The caller receives an error and has no GPIO to release,
leaving resources acquired by the request callback held.
Call the chip's free callback, if present, before clearing the requested
bit on label allocation failure. Leave request callback errors on the
existing path to avoid freeing a failed request.
Cc: stable@vger.kernel.org
Fixes: 1f2bcb8c8c ("gpio: protect the descriptor label with SRCU")
Signed-off-by: Baek Kyu, Kim <pocj8ur4in@gmail.com>
Link: https://patch.msgid.link/20261018044456.1259250-1-pocj8ur4in@gmail.com
Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
This commit is contained in:
parent
974d2712cb
commit
8381e1f15e
|
|
@ -2627,10 +2627,13 @@ int gpiod_request_commit(struct gpio_desc *desc, const char *label)
|
|||
|
||||
ret = desc_set_label(desc, label ? : "?");
|
||||
if (ret)
|
||||
goto out_clear_bit;
|
||||
goto out_free_gpio;
|
||||
|
||||
return 0;
|
||||
|
||||
out_free_gpio:
|
||||
if (guard.gc->free)
|
||||
guard.gc->free(guard.gc, offset);
|
||||
out_clear_bit:
|
||||
clear_bit(GPIOD_FLAG_REQUESTED, &desc->flags);
|
||||
return ret;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user