Re: [PATCH v2 1/7] gpiolib: fix GPIO descriptor leak in gpiod_get_array()
From: Andy Shevchenko
Date: Wed Nov 04 2026 - 07:09:21 EST
On Tue, Nov 03, 2026 at 07:40:29PM -0800, Dmitry Torokhov wrote:
> In gpiod_get_array(), descs->ndescs is used as the loop induction
> variable and is only incremented at the end of each iteration. When
> krealloc() fails on the first iteration (when index is 0), descs->desc[0]
> has already been acquired via gpiod_get_index(), but descs->ndescs is
> still 0. Consequently, gpiod_put_array() frees descs without releasing
> descs->desc[0], leaking the descriptor.
>
> Fix this by using a dedicated loop induction variable and incrementing
> descs->ndescs immediately upon storing the retrieved descriptor.
> Additionally, since the fast-path array_info setup only executes for
> the first element (index 0), simplify the bitmap_set() calls to start at
> bit 0 for count bits instead of calculating offsets from the loop index.
Independently on the for-loop iterator location
Reviewed-by: Andy Shevchenko <andriy.shevchenko@xxxxxxxxx>
(however I do not see the reason why it should be outside right now)
--
With Best Regards,
Andy Shevchenko