acrn-kernel/drivers/gpio
Shreeya Patel 5467801f1f gpio: Restrict usage of GPIO chip irq members before initialization
GPIO chip irq members are exposed before they could be completely
initialized and this leads to race conditions.

One such issue was observed for the gc->irq.domain variable which
was accessed through the I2C interface in gpiochip_to_irq() before
it could be initialized by gpiochip_add_irqchip(). This resulted in
Kernel NULL pointer dereference.

Following are the logs for reference :-

kernel: Call Trace:
kernel:  gpiod_to_irq+0x53/0x70
kernel:  acpi_dev_gpio_irq_get_by+0x113/0x1f0
kernel:  i2c_acpi_get_irq+0xc0/0xd0
kernel:  i2c_device_probe+0x28a/0x2a0
kernel:  really_probe+0xf2/0x460
kernel: RIP: 0010:gpiochip_to_irq+0x47/0xc0

To avoid such scenarios, restrict usage of GPIO chip irq members before
they are completely initialized.

Signed-off-by: Shreeya Patel <shreeya.patel@collabora.com>
Cc: stable@vger.kernel.org
Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Bartosz Golaszewski <brgl@bgdev.pl>
2022-04-04 14:41:34 +02:00
..
Kconfig Char/Misc and other driver updates for 5.18-rc1 2022-03-28 12:27:35 -07:00
Makefile Char/Misc and other driver updates for 5.18-rc1 2022-03-28 12:27:35 -07:00
TODO
gpio-74x164.c spi: make remove callback a void function 2022-02-09 13:00:45 +00:00
gpio-74xx-mmio.c
gpio-104-dio-48e.c gpio: Bulk conversion to generic_handle_domain_irq() 2021-08-12 11:39:38 +01:00
gpio-104-idi-48.c gpio: Bulk conversion to generic_handle_domain_irq() 2021-08-12 11:39:38 +01:00
gpio-104-idio-16.c gpio: Bulk conversion to generic_handle_domain_irq() 2021-08-12 11:39:38 +01:00
gpio-adnp.c gpio: Get rid of duplicate of_node assignment in the drivers 2021-12-17 17:39:35 +01:00
gpio-adp5520.c
gpio-adp5588.c
gpio-aggregator.c gpio: aggregator: Fix calling into sleeping GPIO controllers 2022-02-02 11:53:46 +01:00
gpio-altera-a10sr.c gpio: altera-a10sr: Switch to use fwnode instead of of_node 2022-01-24 17:23:15 +02:00
gpio-altera.c gpio: Bulk conversion to generic_handle_domain_irq() 2021-08-12 11:39:38 +01:00
gpio-amd-fch.c
gpio-amd8111.c
gpio-amdpt.c gpio: Get rid of duplicate of_node assignment in the drivers 2021-12-17 17:39:35 +01:00
gpio-arizona.c gpio: Propagate firmware node from a parent device 2021-12-17 17:50:46 +01:00
gpio-aspeed-sgpio.c gpio updates for v5.17 2022-01-11 12:31:35 -08:00
gpio-aspeed.c gpio: aspeed: Convert aspeed_gpio.lock to raw_spinlock 2021-12-10 16:14:40 +01:00
gpio-ath79.c gpio: Bulk conversion to generic_handle_domain_irq() 2021-08-12 11:39:38 +01:00
gpio-bcm-kona.c gpio: Setup parent device and get rid of unnecessary of_node assignment 2021-12-17 17:44:19 +01:00
gpio-bd9571mwv.c
gpio-bd71815.c
gpio-bd71828.c gpio: Get rid of duplicate of_node assignment in the drivers 2021-12-17 17:39:35 +01:00
gpio-brcmstb.c gpio: brcmstb: Use local variable to access OF node 2021-12-23 17:08:53 +01:00
gpio-bt8xx.c
gpio-cadence.c gpio: Bulk conversion to generic_handle_domain_irq() 2021-08-12 11:39:38 +01:00
gpio-clps711x.c
gpio-creg-snps.c gpio: Setup parent device and get rid of unnecessary of_node assignment 2021-12-17 17:44:19 +01:00
gpio-crystalcove.c gpio: crystalcove: Set IRQ domain bus token to DOMAIN_BUS_WIRED 2022-01-24 15:48:10 +02:00
gpio-cs5535.c
gpio-da9052.c
gpio-da9055.c
gpio-davinci.c gpio: Get rid of duplicate of_node assignment in the drivers 2021-12-17 17:39:35 +01:00
gpio-dln2.c gpio: dln2: Fix interrupts when replugging the device 2021-12-19 15:03:30 +01:00
gpio-dwapb.c gpio: dwapb: Switch to use fwnode instead of of_node 2022-01-03 11:06:18 +01:00
gpio-eic-sprd.c gpio: Get rid of duplicate of_node assignment in the drivers 2021-12-17 17:39:35 +01:00
gpio-em.c gpio: Get rid of duplicate of_node assignment in the drivers 2021-12-17 17:39:35 +01:00
gpio-en7523.c gpio: Add support for Airoha EN7523 GPIO controller 2022-02-02 10:16:19 +01:00
gpio-ep93xx.c gpio: Bulk conversion to generic_handle_domain_irq() 2021-08-12 11:39:38 +01:00
gpio-exar.c
gpio-f7188x.c
gpio-ftgpio010.c gpio: Bulk conversion to generic_handle_domain_irq() 2021-08-12 11:39:38 +01:00
gpio-ge.c gpio: Get rid of duplicate of_node assignment in the drivers 2021-12-17 17:39:35 +01:00
gpio-gpio-mm.c
gpio-grgpio.c gpio: Get rid of duplicate of_node assignment in the drivers 2021-12-17 17:39:35 +01:00
gpio-gw-pld.c gpio: Remove unused local OF node pointers 2021-12-22 10:05:26 +01:00
gpio-hisi.c gpio: Bulk conversion to generic_handle_domain_irq() 2021-08-12 11:39:38 +01:00
gpio-hlwd.c gpio: Bulk conversion to generic_handle_domain_irq() 2021-08-12 11:39:38 +01:00
gpio-htc-egpio.c
gpio-ich.c
gpio-idt3243x.c gpio: idt3243x: Fix an ignored error return from platform_get_irq() 2022-01-20 09:05:46 +01:00
gpio-iop.c
gpio-it87.c
gpio-ixp4xx.c
gpio-janz-ttl.c
gpio-kempld.c
gpio-logicvc.c
gpio-loongson.c
gpio-loongson1.c
gpio-lp873x.c
gpio-lp3943.c
gpio-lp87565.c
gpio-lpc18xx.c
gpio-lpc32xx.c gpio: Setup parent device and get rid of unnecessary of_node assignment 2021-12-17 17:44:19 +01:00
gpio-madera.c
gpio-max730x.c gpio: max730x: Make __max730x_remove() return void 2021-10-13 19:52:26 +02:00
gpio-max732x.c
gpio-max3191x.c spi: make remove callback a void function 2022-02-09 13:00:45 +00:00
gpio-max7300.c gpio: max730x: Make __max730x_remove() return void 2021-10-13 19:52:26 +02:00
gpio-max7301.c spi: make remove callback a void function 2022-02-09 13:00:45 +00:00
gpio-max77620.c gpio: max77620: drop unneeded MODULE_ALIAS 2021-09-22 12:12:09 +02:00
gpio-max77650.c
gpio-mb86s7x.c
gpio-mc33880.c spi: make remove callback a void function 2022-02-09 13:00:45 +00:00
gpio-menz127.c
gpio-merrifield.c gpio: merrifield: check the return value of devm_kstrdup() 2022-01-24 17:23:15 +02:00
gpio-ml-ioh.c gpio: ml-ioh: Change whitespace to match gpio-pch.c 2021-12-01 15:10:26 +02:00
gpio-mlxbf.c
gpio-mlxbf2.c gpio updates for v5.16 2021-11-08 11:55:21 -08:00
gpio-mm-lantiq.c
gpio-mmio.c
gpio-mockup.c gpio: mockup: Switch to use kasprintf_strarray() 2021-11-19 10:38:16 +02:00
gpio-moxtet.c
gpio-mpc8xxx.c gpio: mpc8xxx: Fix an ignored error return from platform_get_irq() 2022-01-20 09:05:57 +01:00
gpio-mpc5200.c
gpio-msc313.c gpio: msc313: Add support for SSD201 and SSD202D 2021-12-20 16:07:22 +01:00
gpio-mt7621.c gpio: mt7621: Kill parent_device usage 2022-02-09 13:36:53 +00:00
gpio-mvebu.c gpio: Get rid of duplicate of_node assignment in the drivers 2021-12-17 17:39:35 +01:00
gpio-mxc.c gpio: Bulk conversion to generic_handle_domain_irq() 2021-08-12 11:39:38 +01:00
gpio-mxs.c gpio: Bulk conversion to generic_handle_domain_irq() 2021-08-12 11:39:38 +01:00
gpio-octeon.c
gpio-omap.c gpio: omap: Move PM device over to irq domain 2022-02-09 13:36:53 +00:00
gpio-palmas.c gpio: Get rid of duplicate of_node assignment in the drivers 2021-12-17 17:39:35 +01:00
gpio-pca953x.c gpio: pca953x: Improve bias setting 2021-10-06 13:01:45 +02:00
gpio-pca9570.c
gpio-pcf857x.c
gpio-pch.c gpio: pch: Cache &pdev->dev to reduce repetition 2021-12-01 15:10:26 +02:00
gpio-pci-idio-16.c gpio: Bulk conversion to generic_handle_domain_irq() 2021-08-12 11:39:38 +01:00
gpio-pcie-idio-24.c gpio: Bulk conversion to generic_handle_domain_irq() 2021-08-12 11:39:38 +01:00
gpio-pisosr.c spi: make remove callback a void function 2022-02-09 13:00:45 +00:00
gpio-pl061.c gpio: Bulk conversion to generic_handle_domain_irq() 2021-08-12 11:39:38 +01:00
gpio-pmic-eic-sprd.c gpio: Get rid of duplicate of_node assignment in the drivers 2021-12-17 17:39:35 +01:00
gpio-pxa.c gpio: Setup parent device and get rid of unnecessary of_node assignment 2021-12-17 17:44:19 +01:00
gpio-raspberrypi-exp.c gpio: Get rid of duplicate of_node assignment in the drivers 2021-12-17 17:39:35 +01:00
gpio-rc5t583.c
gpio-rcar.c gpio: rcar: Move PM device over to irq domain 2022-02-09 13:36:53 +00:00
gpio-rda.c gpio: Remove unused local OF node pointers 2021-12-22 10:05:26 +01:00
gpio-rdc321x.c
gpio-realtek-otto.c gpio: realtek-otto: fix GPIO line IRQ offset 2021-10-30 16:58:58 +02:00
gpio-reg.c
gpio-regmap.c gpio: regmap: Switch to use fwnode instead of of_node 2021-12-23 17:14:19 +01:00
gpio-rockchip.c gpio: rockchip: Reset int_bothedge when changing trigger 2022-02-16 15:52:22 +01:00
gpio-sa1100.c
gpio-sama5d2-piobu.c gpio: Get rid of duplicate of_node assignment in the drivers 2021-12-17 17:39:35 +01:00
gpio-sch.c gpio: sch: fix typo in a comment 2021-12-13 13:29:09 +02:00
gpio-sch311x.c
gpio-sifive.c gpio: sifive: use the correct register to read output values 2022-02-08 10:43:15 +01:00
gpio-sim.c gpio: sim: fix a typo 2022-03-10 10:02:19 +01:00
gpio-siox.c
gpio-sl28cpld.c
gpio-sodaville.c gpio: Bulk conversion to generic_handle_domain_irq() 2021-08-12 11:39:38 +01:00
gpio-spear-spics.c
gpio-sprd.c gpio: Get rid of duplicate of_node assignment in the drivers 2021-12-17 17:39:35 +01:00
gpio-sta2x11.c gpio: sta2x11: fix typo in a comment 2021-12-17 12:26:13 +01:00
gpio-stmpe.c gpio: Get rid of duplicate of_node assignment in the drivers 2021-12-17 17:39:35 +01:00
gpio-stp-xway.c
gpio-syscon.c
gpio-tb10x.c gpio: Bulk conversion to generic_handle_domain_irq() 2021-08-12 11:39:38 +01:00
gpio-tc3589x.c gpio: Get rid of duplicate of_node assignment in the drivers 2021-12-17 17:39:35 +01:00
gpio-tegra.c gpio: tegra: Get rid of duplicate of_node assignment 2022-01-24 17:23:15 +02:00
gpio-tegra186.c gpio: tegra186: Add IRQ per bank for Tegra241 2022-03-07 15:25:27 +01:00
gpio-thunderx.c
gpio-timberdale.c
gpio-tn48m.c gpio: Add Delta TN48M CPLD GPIO driver 2022-02-25 09:59:35 +01:00
gpio-tpic2810.c
gpio-tps6586x.c gpio: Propagate firmware node from a parent device 2021-12-17 17:50:46 +01:00
gpio-tps65086.c
gpio-tps65218.c gpio: Get rid of duplicate of_node assignment in the drivers 2021-12-17 17:39:35 +01:00
gpio-tps65910.c gpio: Propagate firmware node from a parent device 2021-12-17 17:50:46 +01:00
gpio-tps65912.c
gpio-tps68470.c gpio: tps68470: Allow building as module 2022-01-24 17:23:15 +02:00
gpio-tqmx86.c gpio: tpmx86: Move PM device over to irq domain 2022-02-09 13:36:54 +00:00
gpio-ts4800.c
gpio-ts4900.c gpio fixes for v5.18-rc1 2022-04-01 10:26:09 -07:00
gpio-ts5500.c gpio: ts5500: Fix Links to Technologic Systems web resources 2022-03-31 16:44:57 +02:00
gpio-twl4030.c
gpio-twl6040.c gpio: Propagate firmware node from a parent device 2021-12-17 17:50:46 +01:00
gpio-ucb1400.c
gpio-uniphier.c gpio updates for v5.16 2021-11-08 11:55:21 -08:00
gpio-vf610.c gpio: Get rid of duplicate of_node assignment in the drivers 2021-12-17 17:39:35 +01:00
gpio-viperboard.c gpio: viperboard: remove platform_set_drvdata() call in probe 2021-08-31 11:29:28 +02:00
gpio-virtio.c virtio: wrap config->reset calls 2022-01-14 18:50:52 -05:00
gpio-visconti.c
gpio-vr41xx.c
gpio-vx855.c
gpio-wcd934x.c
gpio-wcove.c
gpio-winbond.c
gpio-wm831x.c gpio: Propagate firmware node from a parent device 2021-12-17 17:50:46 +01:00
gpio-wm8350.c
gpio-wm8994.c
gpio-ws16c48.c gpio: Bulk conversion to generic_handle_domain_irq() 2021-08-12 11:39:38 +01:00
gpio-xgene-sb.c
gpio-xgene.c
gpio-xgs-iproc.c gpio: xgs-iproc: fix parsing of ngpios property 2021-10-25 10:10:37 +02:00
gpio-xilinx.c gpio: xilinx: simplify getting .driver_data 2021-09-22 11:48:19 +02:00
gpio-xlp.c gpio: xlp: Fix build errors from Netlogic XLP removal 2021-12-03 16:00:40 +01:00
gpio-xra1403.c
gpio-xtensa.c
gpio-zevio.c
gpio-zynq.c gpio: Bulk conversion to generic_handle_domain_irq() 2021-08-12 11:39:38 +01:00
gpio-zynqmp-modepin.c gpio: modepin: Add driver support for modepin GPIO controller 2021-09-23 10:09:58 +02:00
gpiolib-acpi.c gpiolib: acpi: Convert ACPI value of debounce to microseconds 2022-03-07 15:25:27 +01:00
gpiolib-acpi.h
gpiolib-cdev.c gpiolib: Never return internal error codes to user space 2022-02-08 10:34:15 +01:00
gpiolib-cdev.h
gpiolib-devres.c gpiolib: constify passed device_node pointer 2021-08-05 21:21:58 +02:00
gpiolib-legacy.c
gpiolib-of.c gpiolib: Introduce for_each_gpio_desc_with_flag() macro 2022-02-08 10:35:49 +01:00
gpiolib-of.h
gpiolib-sysfs.c gpio updates for v5.18-rc1 2022-03-25 12:28:23 -07:00
gpiolib-sysfs.h
gpiolib.c gpio: Restrict usage of GPIO chip irq members before initialization 2022-04-04 14:41:34 +02:00
gpiolib.h gpio updates for v5.18-rc1 2022-03-25 12:28:23 -07:00