gpio: gpiolib-of: Fix refcount bugs in of_mm_gpiochip_add_data()
[ Upstream commit5d07a692f9
] We should use of_node_get() when a new reference of device_node is created. It is noted that the old reference stored in 'mm_gc->gc.of_node' should also be decreased. This patch is based on the fact that there is a call site in function 'qe_add_gpiochips()' of src file 'drivers\soc\fsl\qe\gpio.c'. In this function, of_mm_gpiochip_add_data() is contained in an iteration of for_each_compatible_node() which will automatically increase and decrease the refcount. So we need additional of_node_get() for the reference escape in of_mm_gpiochip_add_data(). Fixes:a19e3da5bc
("of/gpio: Kill of_gpio_chip and add members directly to gpio_chip") Signed-off-by: Liang He <windhl@126.com> Signed-off-by: Bartosz Golaszewski <brgl@bgdev.pl> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
a85c7dd1ed
commit
26975d8ea9
@ -863,7 +863,8 @@ int of_mm_gpiochip_add_data(struct device_node *np,
|
|||||||
if (mm_gc->save_regs)
|
if (mm_gc->save_regs)
|
||||||
mm_gc->save_regs(mm_gc);
|
mm_gc->save_regs(mm_gc);
|
||||||
|
|
||||||
mm_gc->gc.of_node = np;
|
of_node_put(mm_gc->gc.of_node);
|
||||||
|
mm_gc->gc.of_node = of_node_get(np);
|
||||||
|
|
||||||
ret = gpiochip_add_data(gc, data);
|
ret = gpiochip_add_data(gc, data);
|
||||||
if (ret)
|
if (ret)
|
||||||
@ -871,6 +872,7 @@ int of_mm_gpiochip_add_data(struct device_node *np,
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
err2:
|
err2:
|
||||||
|
of_node_put(np);
|
||||||
iounmap(mm_gc->regs);
|
iounmap(mm_gc->regs);
|
||||||
err1:
|
err1:
|
||||||
kfree(gc->label);
|
kfree(gc->label);
|
||||||
|
Reference in New Issue
Block a user