Message ID | 20231204093509.19225-1-brgl@bgdev.pl |
---|---|
Headers | show |
Series | gpio/pinctrl: replace gpiochip_is_requested() with a safer interface | expand |
On Mon, Dec 4, 2023 at 10:35 AM Bartosz Golaszewski <brgl@bgdev.pl> wrote: > From: Bartosz Golaszewski <bartosz.golaszewski@linaro.org> > > While reworking the locking in GPIOLIB I realized that locking the > descriptor with users still calling gpiochip_is_requested() will still > be buggy as it returns a pointer to a string that can be freed whenever > the descriptor is released. Let's provide a safer alternative in the > form of a function that returns a copy of the label. > > Use it in all drivers and remove gpiochip_is_requested(). The series: Acked-by: Linus Walleij <linus.walleij@linaro.org> > I plan to provide this series in an immutable branch for the pinctrl and > baytrail trees to pull. Nice! I'll pull it. Yours, Linus Walleij
From: Bartosz Golaszewski <bartosz.golaszewski@linaro.org> While reworking the locking in GPIOLIB I realized that locking the descriptor with users still calling gpiochip_is_requested() will still be buggy as it returns a pointer to a string that can be freed whenever the descriptor is released. Let's provide a safer alternative in the form of a function that returns a copy of the label. Use it in all drivers and remove gpiochip_is_requested(). I plan to provide this series in an immutable branch for the pinctrl and baytrail trees to pull. v2 -> v3: - rename a local variable cpy -> copy - use unsigned int to loop over GPIO lines - use an unscoped guard in patch 10/10 instead of the scoped variant v1 -> v2: - use DEFINE_CLASS() to register a destructor for making sure that the duplicated label doesn't leak out of the for_each loops even with break; Bartosz Golaszewski (10): gpiolib: provide gpiochip_dup_line_label() gpio: wm831x: use gpiochip_dup_line_label() gpio: wm8994: use gpiochip_dup_line_label() gpio: stmpe: use gpiochip_dup_line_label() pinctrl: abx500: use gpiochip_dup_line_label() pinctrl: nomadik: use gpiochip_dup_line_label() pinctrl: baytrail: use gpiochip_dup_line_label() pinctrl: sppctl: use gpiochip_dup_line_label() gpiolib: use gpiochip_dup_line_label() in for_each helpers gpiolib: remove gpiochip_is_requested() drivers/gpio/gpio-stmpe.c | 6 +++- drivers/gpio/gpio-wm831x.c | 14 +++++--- drivers/gpio/gpio-wm8994.c | 13 +++++--- drivers/gpio/gpiolib.c | 35 ++++++++++++-------- drivers/pinctrl/intel/pinctrl-baytrail.c | 11 ++++--- drivers/pinctrl/nomadik/pinctrl-abx500.c | 9 ++++-- drivers/pinctrl/nomadik/pinctrl-nomadik.c | 6 +++- drivers/pinctrl/sunplus/sppctl.c | 10 +++--- include/linux/gpio/driver.h | 39 +++++++++++++++++------ 9 files changed, 96 insertions(+), 47 deletions(-)