linux/drivers/gpio
Johan Hovold 483d821108 gpio: sysfs: fix memory leaks and device hotplug
Unregister GPIOs requested through sysfs at chip remove to avoid leaking
the associated memory and sysfs entries.

The stale sysfs entries prevented the gpio numbers from being exported
when the gpio range was later reused (e.g. at device reconnect).

This also fixes the related module-reference leak.

Note that kernfs makes sure that any on-going sysfs operations finish
before the class devices are unregistered and that further accesses
fail.

The chip exported flag is used to prevent gpiod exports during removal.
This also makes it harder to trigger, but does not fix, the related race
between gpiochip_remove and export_store, which is really a race with
gpiod_request that needs to be addressed separately.

Also note that this would prevent the crashes (e.g. NULL-dereferences)
at reconnect that affects pre-3.18 kernels, as well as use-after-free on
operations on open attribute files on pre-3.14 kernels (prior to
kernfs).

Fixes: d8f388d8dc ("gpio: sysfs interface")
Cc: stable <stable@vger.kernel.org>	# v2.6.27: 01cca93a94
Signed-off-by: Johan Hovold <johan@kernel.org>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
2015-04-29 23:42:47 +02:00
..
devres.c gpio: fix constconst in devres 2015-03-17 17:45:59 +01:00
gpio-74x164.c gpio: remove all usage of gpio_remove retval in driver/gpio 2014-07-22 16:39:26 +02:00
gpio-74xx-mmio.c GPIO: Add driver for 74xx-ICs with MMIO access 2014-10-21 10:48:04 +02:00
gpio-adnp.c gpio: adnp: switch to use irqchip helpers 2014-09-02 10:44:01 +02:00
gpio-adp5520.c gpio: drop owner assignment from platform_drivers 2014-10-20 16:20:31 +02:00
gpio-adp5588.c gpio: removing kfree remove functionality 2015-04-08 16:54:01 +02:00
gpio-altera.c altera_gpio_probe() can be static 2015-03-27 09:28:40 +01:00
gpio-amd8111.c gpio-amd8111: add release_region on ioport_map failure 2015-01-19 09:48:45 +01:00
gpio-arizona.c This is the bulk of GPIO changes for the v4.1 development 2015-04-18 08:22:10 -04:00
gpio-bcm-kona.c Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
gpio-bt8xx.c gpio: bt8xx: fix release of managed resources 2014-08-29 14:31:43 +02:00
gpio-clps711x.c gpio: drop owner assignment from platform_drivers 2014-10-20 16:20:31 +02:00
gpio-crystalcove.c gpio/crystalcove: Add additional GPIO for Panel control 2015-03-26 09:09:17 +01:00
gpio-cs5535.c Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
gpio-da9052.c gpio: use (!foo) instead of (foo == NULL) 2015-04-08 09:54:21 +02:00
gpio-da9055.c gpio: use (!foo) instead of (foo == NULL) 2015-04-08 09:54:21 +02:00
gpio-davinci.c Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
gpio-dln2.c Linux 3.19-rc5 2015-01-20 11:03:07 +01:00
gpio-dwapb.c gpio: dwapb: Convert to use resource managed APIs 2015-01-15 17:23:21 +01:00
gpio-em.c Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
gpio-ep93xx.c gpio: drop owner assignment from platform_drivers 2014-10-20 16:20:31 +02:00
gpio-f7188x.c gpio: f7188x: add GPIO support for F71869A 2015-03-17 17:57:37 +01:00
gpio-ge.c gpio: ge: Convert to use devm_kstrdup 2015-01-29 10:33:15 +01:00
gpio-generic.c gpio-generic: add bgpio_set_multiple functions 2015-01-19 11:07:00 +01:00
gpio-grgpio.c Linux 3.19-rc5 2015-01-20 11:03:07 +01:00
gpio-ich.c gpio: ich: Implement get_direction function 2015-04-08 09:54:27 +02:00
gpio-intel-mid.c gpio: intel-mid: switch to using gpiolib irqchip helpers 2014-06-19 09:31:16 +02:00
gpio-iop.c gpio: drop owner assignment from platform_drivers 2014-10-20 16:20:31 +02:00
gpio-it8761e.c gpio: remove all usage of gpio_remove retval in driver/gpio 2014-07-22 16:39:26 +02:00
gpio-janz-ttl.c gpio: drop owner assignment from platform_drivers 2014-10-20 16:20:31 +02:00
gpio-kempld.c gpio: use (!foo) instead of (foo == NULL) 2015-04-08 09:54:21 +02:00
gpio-ks8695.c gpio: ks8695: fix 'else should follow close brace '}'' 2014-10-02 16:07:00 +02:00
gpio-loongson.c gpio: loongson: Add Loongson-3A/3B GPIO driver support 2015-04-08 09:53:42 +02:00
gpio-lp3943.c gpio: drop owner assignment from platform_drivers 2014-10-20 16:20:31 +02:00
gpio-lpc32xx.c gpio: drop owner assignment from platform_drivers 2014-10-20 16:20:31 +02:00
gpio-lynxpoint.c gpio: drop owner assignment from platform_drivers 2014-10-20 16:20:31 +02:00
gpio-max730x.c gpio: remove all usage of gpio_remove retval in driver/gpio 2014-07-22 16:39:26 +02:00
gpio-max732x.c gpio: max732x: convert to GPIOLIB_IRQCHIP 2015-03-02 15:44:08 +01:00
gpio-max7300.c gpio: max7300: remove 'ret' variable 2015-04-08 09:54:10 +02:00
gpio-max7301.c
gpio-mb86s7x.c gpio: mb86s70: Return error if requesting an already assigned gpio 2015-03-02 15:35:41 +01:00
gpio-mc9s08dz60.c gpio: remove all usage of gpio_remove retval in driver/gpio 2014-07-22 16:39:26 +02:00
gpio-mc33880.c gpio: use (!foo) instead of (foo == NULL) 2015-04-08 09:54:21 +02:00
gpio-mcp23s08.c gpio: removing kfree remove functionality 2015-04-08 16:54:01 +02:00
gpio-ml-ioh.c gpio: remove all usage of gpio_remove retval in driver/gpio 2014-07-22 16:39:26 +02:00
gpio-mm-lantiq.c gpio: gpio-mm-lantiq: Use of_mm_gpiochip_remove 2015-01-20 11:18:51 +01:00
gpio-moxart.c gpio: moxart: convert to use basic mmio gpio library 2015-01-09 10:24:29 +01:00
gpio-mpc8xxx.c gpio: mpc8xxx: remove __initdata annotation for mpc8xxx_gpio_ids[] 2015-03-05 10:51:35 +01:00
gpio-mpc5200.c gpio: mpc5200: Use of_mm_gpiochip_remove 2015-01-20 11:18:28 +01:00
gpio-msic.c gpio: drop owner assignment from platform_drivers 2014-10-20 16:20:31 +02:00
gpio-msm-v2.c gpio: drop owner assignment from platform_drivers 2014-10-20 16:20:31 +02:00
gpio-mvebu.c gpio: mvebu: Fix mask/unmask managment per irq chip type 2015-04-08 16:35:07 +02:00
gpio-mxc.c gpio: drop owner assignment from platform_drivers 2014-10-20 16:20:31 +02:00
gpio-mxs.c Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
gpio-octeon.c gpio: drop owner assignment from platform_drivers 2014-10-20 16:20:31 +02:00
gpio-omap.c gpio: omap: get rid of GPIO_INDEX() macro 2015-03-27 11:08:51 +01:00
gpio-palmas.c gpio: remove all usage of gpio_remove retval in driver/gpio 2014-07-22 16:39:26 +02:00
gpio-pca953x.c gpio: pca953x: Drop deprecated DT bindings 2014-08-28 14:19:40 +02:00
gpio-pcf857x.c gpio: pcf857x: Propagate wake-up setting to parent irq controller 2015-03-04 13:50:46 +01:00
gpio-pch.c gpio: pch: Build context save/restore only for PM 2014-10-02 16:07:00 +02:00
gpio-pl061.c gpio: pl061: hook request if gpio-ranges avaiable 2014-12-03 14:44:23 +01:00
gpio-pxa.c gpio: pxa: simplify BANK_OFF macro offset calculation 2015-03-09 14:41:12 +01:00
gpio-rc5t583.c gpio: drop owner assignment from platform_drivers 2014-10-20 16:20:31 +02:00
gpio-rcar.c gpio: rcar: Prevent module clock disable when wake-up is enabled 2015-03-26 10:25:32 +01:00
gpio-rdc321x.c gpio: remove all usage of gpio_remove retval in driver/gpio 2014-07-22 16:39:26 +02:00
gpio-sa1100.c ARM: 8281/1: sa1100: move GPIO-related IRQ code to gpio driver 2015-01-29 15:24:49 +00:00
gpio-samsung.c gpio: samsung: Remove remaining check for CONFIG_S5P_GPIO_DRVSTR 2014-09-23 17:51:39 +02:00
gpio-sch311x.c gpio: remove all usage of gpio_remove retval in driver/gpio 2014-07-22 16:39:26 +02:00
gpio-sch.c Revert "gpio: sch: use uapi/linux/pci_ids.h directly" 2015-04-10 11:35:45 +02:00
gpio-sodaville.c gpio: remove all usage of gpio_remove retval in driver/gpio 2014-07-22 16:39:26 +02:00
gpio-spear-spics.c Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
gpio-sta2x11.c gpio: drop owner assignment from platform_drivers 2014-10-20 16:20:31 +02:00
gpio-stmpe.c gpio: stmpe: enforce device tree only mode 2015-01-20 11:03:22 +01:00
gpio-stp-xway.c Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
gpio-sx150x.c gpio: sx150x: fixup OF support 2015-01-22 09:45:24 +01:00
gpio-syscon.c gpio: syscon: reduce message level when direction reg offset not in dt 2015-03-27 11:17:08 +01:00
gpio-tb10x.c gpio: gpio-tb10x: remove incorrect __exit markup 2015-03-27 11:25:23 +01:00
gpio-tc3589x.c mfd: tc3589x: Enforce device-tree only mode 2015-03-26 14:20:17 +00:00
gpio-tegra.c Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
gpio-timberdale.c gpio: drop owner assignment from platform_drivers 2014-10-20 16:20:31 +02:00
gpio-tps6586x.c gpio: remove all usage of gpio_remove retval in driver/gpio 2014-07-22 16:39:26 +02:00
gpio-tps65910.c gpio: remove all usage of gpio_remove retval in driver/gpio 2014-07-22 16:39:26 +02:00
gpio-tps65912.c gpio: tps65912: fix wrong container_of arguments 2015-02-23 15:40:32 +01:00
gpio-ts5500.c gpio: drop owner assignment from platform_drivers 2014-10-20 16:20:31 +02:00
gpio-twl4030.c gpio: drop owner assignment from platform_drivers 2014-10-20 16:20:31 +02:00
gpio-twl6040.c gpio: drop owner assignment from platform_drivers 2014-10-20 16:20:31 +02:00
gpio-tz1090-pdc.c gpio: tz1090-pdc: Use resource_size to fix off-by-one resource size calculation 2015-01-29 10:34:13 +01:00
gpio-tz1090.c gpio: tz1090: Use resource_size to fix off-by-one 2015-01-15 17:23:21 +01:00
gpio-ucb1400.c gpio: remove all usage of gpio_remove retval in driver/gpio 2014-07-22 16:39:26 +02:00
gpio-vf610.c gpio: vf610: Replaces comma between expression statements by semicolon 2015-03-06 11:17:36 +01:00
gpio-viperboard.c gpio: remove all usage of gpio_remove retval in driver/gpio 2014-07-22 16:39:26 +02:00
gpio-vr41xx.c Driver core patches for 3.19-rc1 2014-12-14 16:10:09 -08:00
gpio-vx855.c gpio: vx855: Switch to use managed resources APIs 2015-01-15 17:23:18 +01:00
gpio-wm831x.c gpio: remove all usage of gpio_remove retval in driver/gpio 2014-07-22 16:39:26 +02:00
gpio-wm8350.c gpio: remove all usage of gpio_remove retval in driver/gpio 2014-07-22 16:39:26 +02:00
gpio-wm8994.c gpio: remove all usage of gpio_remove retval in driver/gpio 2014-07-22 16:39:26 +02:00
gpio-xgene-sb.c gpio: x-gene: fix devm_ioremap_resource() check 2015-04-08 09:53:57 +02:00
gpio-xgene.c gpio: drop owner assignment from platform_drivers 2014-10-20 16:20:31 +02:00
gpio-xilinx.c gpio/xilinx: Use of_mm_gpiochip_remove 2015-01-15 17:23:18 +01:00
gpio-xtensa.c gpio: drop owner assignment from platform_drivers 2014-10-20 16:20:31 +02:00
gpio-zevio.c gpio: zevio: Use of_mm_gpiochip_remove 2015-01-20 11:18:56 +01:00
gpio-zynq.c PM: Merge the SET*_RUNTIME_PM_OPS() macros 2014-12-04 00:51:30 +01:00
gpiolib-acpi.c gpiolib: change gpio pin from unsigned to signed in acpi callback 2015-04-27 15:20:33 +02:00
gpiolib-legacy.c gpio: fix deferred probe detection for legacy API 2014-12-02 15:46:36 +01:00
gpiolib-of.c This is the bulk of GPIO changes for the v4.1 development 2015-04-18 08:22:10 -04:00
gpiolib-sysfs.c gpio: sysfs: fix memory leaks and device hotplug 2015-04-29 23:42:47 +02:00
gpiolib.c gpio / ACPI: Avoid unnecessary checks in __gpiod_get_index() 2015-03-19 09:46:04 +01:00
gpiolib.h This is the bulk of GPIO changes for the v4.1 development 2015-04-18 08:22:10 -04:00
Kconfig ARM: SoC cleanups for v4.1 2015-04-22 09:04:39 -07:00
Makefile ARM: SoC cleanups for v4.1 2015-04-22 09:04:39 -07:00