On Thu, Nov 1, 2018 at 2:13 PM Muchun Song <smuchun@xxxxxxxxx> wrote: > gpiod_request_commit() copies the pointer to the label passed as > an argument only to be used later. But there's a chance the caller > could immediately free the passed string(e.g., local variable). > This could trigger a use after free when we use gpio label(e.g., > gpiochip_unlock_as_irq(), gpiochip_is_requested()). > > To be on the safe side: duplicate the string with kstrdup_const() > so that if an unaware user passes an address to a stack-allocated > buffer, we won't get the arbitrary label. > > Also fix gpiod_set_consumer_name(). > > Signed-off-by: Muchun Song <smuchun@xxxxxxxxx> I am still a bit worried about the kstrdup_const() that this introduces. The tinyfication people will not like that we now copy every GPIO line name from the device tree into a new reference copy. What we *REALLY* want to do is: const char *str; const char *ref; if (pointer_on_stack(str)) ref = kstrdup_const(str); else ref = str; Isn't this possible to achieve somehow? If not, why not? I suspect maybe there is no simple solution to this, but what about a really complicated and hard solution? I'm looping in Nico for advice. Maybe I will end up applying it anyway but I'm not sure. The patch looks good otherwise. Yours, Linus Walleij