From: sashiko-bot@kernel.org
To: "Mikhail Kshevetskiy" <mikhail.kshevetskiy@iopsys.eu>
Cc: devicetree@vger.kernel.org, conor+dt@kernel.org, robh@kernel.org
Subject: Re: [PATCH v10 22/36] pinctrl: airoha: statically allocate gpio regs structure
Date: Wed, 05 Aug 2026 12:59:23 +0000 [thread overview]
Message-ID: <20260805125923.C10A41F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260805123408.3767648-23-mikhail.kshevetskiy@iopsys.eu>
Thank you for your contribution! Sashiko AI review found 3 potential issue(s) to consider:
New issues:
- [Low] The statically allocated `airoha_gpiochip_regs` structure is not marked as `const`.
Pre-existing issues:
- [High] Redundant clearing of the interrupt status bit in `airoha_irq_handler` creates a race condition for edge-triggered interrupts, potentially causing them to be lost.
- [High] Interrupt handler is requested before the gpiochip is fully initialized, creating a window for a Use-After-Free of the irqdomain during device teardown.
--
--- Patch [22]: [PATCH v10 22/36] pinctrl: airoha: statically allocate gpio regs structure ---
commit 9c7301e7610a12f2a7f33d437ec5e58ef02929f3
Author: Mikhail Kshevetskiy <mikhail.kshevetskiy@iopsys.eu>
pinctrl: airoha: statically allocate gpio regs structure
This commit refactors the Airoha pinctrl driver to collect all GPIO register
arrays into a single statically allocated structure. The driver is updated
to reference this new structure via a pointer, simplifying the gpiochip setup.
> diff --git a/drivers/pinctrl/airoha/pinctrl-airoha.c b/drivers/pinctrl/airoha/pinctrl-airoha.c
> index 8e418f27fd8bc..e8d5252b17f30 100644
> --- a/drivers/pinctrl/airoha/pinctrl-airoha.c
> +++ b/drivers/pinctrl/airoha/pinctrl-airoha.c
> @@ -339,6 +350,15 @@ static const u32 irq_edge_regs[] = {
> REG_GPIO_INT_EDGE3
> };
>
> +static struct airoha_gpiochip_regs airoha_gpiochip_regs = {
[Severity: Low]
Could this structure be marked as const? It appears to only serve as a
read-only lookup table of pointer arrays, so marking it const would move
it to the read-only .rodata section.
> + .data = gpio_data_regs,
> + .dir = gpio_dir_regs,
> + .out = gpio_out_regs,
> + .status = irq_status_regs,
> + .level = irq_level_regs,
> + .edge = irq_edge_regs,
> +};
> +
[ ... ]
> @@ -2698,7 +2708,7 @@ static irqreturn_t airoha_irq_handler(int irq, void *data)
>
> generic_handle_domain_irq(girq->domain, offset);
> regmap_write(pinctrl->regmap,
> - pinctrl->gpiochip.status[i], BIT(irq));
[Severity: High]
This is a pre-existing issue, but does this regmap_write() to clear the status
bit create a race condition for edge-triggered interrupts?
The core IRQ subsystem already clears the hardware interrupt status bit before
invoking the flow handler via airoha_irq_ack(). If a new edge-triggered
interrupt arrives on the same pin while generic_handle_domain_irq() is
executing, the hardware will latch the new event.
Would clearing the status bit a second time here wipe out the newly latched
interrupt before it can be processed?
> + pinctrl->gpio_regs->status[i], BIT(irq));
> }
> handled |= !!status;
> }
> @@ -2719,8 +2729,7 @@ static const struct irq_chip airoha_gpio_irq_chip = {
> static int airoha_pinctrl_add_gpiochip(struct airoha_pinctrl *pinctrl,
> struct platform_device *pdev)
> {
> - struct airoha_pinctrl_gpiochip *chip = &pinctrl->gpiochip;
> - struct gpio_chip *gc = &chip->chip;
> + struct gpio_chip *gc = &pinctrl->gpiochip;
[Severity: High]
This isn't a bug introduced by this patch, but is there a use-after-free
risk during device teardown based on the initialization order in this function?
Further down in airoha_pinctrl_add_gpiochip(), devm_request_irq() is called
before devm_gpiochip_add_data():
err = devm_request_irq(dev, irq, airoha_irq_handler, IRQF_SHARED,
dev_name(dev), pinctrl);
if (err) {
dev_err(dev, "error requesting irq %d: %d\n", irq, err);
return err;
}
return devm_gpiochip_add_data(dev, gc, pinctrl);
Since devres cleans up in reverse order, devm_gpiochip_add_data() will be
undone first, destroying the irq domain while the shared interrupt handler
remains active. If a shared interrupt fires during this window,
airoha_irq_handler() will pass a freed girq->domain to
generic_handle_domain_irq().
Should devm_request_irq() be called after devm_gpiochip_add_data() to ensure
safe teardown?
> struct gpio_irq_chip *girq = &gc->irq;
> struct device *dev = &pdev->dev;
> int irq, err;
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260805123408.3767648-1-mikhail.kshevetskiy@iopsys.eu?part=22
next prev parent reply other threads:[~2026-08-05 12:59 UTC|newest]
Thread overview: 61+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-05 12:33 [PATCH v10 00/36] pinctrl: airoha: split on shared and SoC drivers, add more SoCs Mikhail Kshevetskiy
2026-08-05 12:33 ` [PATCH v10 01/36] dt-bindings: pinctrl: airoha: en7581: fix misprint in i2s function name Mikhail Kshevetskiy
2026-08-05 12:33 ` [PATCH v10 02/36] dt-bindings: pinctrl: airoha: an7583: fix device tree binding schema Mikhail Kshevetskiy
2026-08-06 7:07 ` Krzysztof Kozlowski
2026-08-05 12:33 ` [PATCH v10 03/36] pinctrl: airoha: fix mdio bitfield names Mikhail Kshevetskiy
2026-08-05 12:33 ` [PATCH v10 04/36] pinctrl: airoha: an7581: fix pinconf of i2c_scl/i2c_sda pins Mikhail Kshevetskiy
2026-08-05 12:33 ` [PATCH v10 05/36] pinctrl: airoha: an7583: fix I2C0_SDA_PD register bit order Mikhail Kshevetskiy
2026-08-05 12:33 ` [PATCH v10 06/36] pinctrl: airoha: an7581: fix mux/conf of pcie_reset pins Mikhail Kshevetskiy
2026-08-05 13:01 ` sashiko-bot
2026-08-05 12:33 ` [PATCH v10 07/36] dt-bindings: pinctrl: airoha: en7581: allow configuration of pcie_reset pins as gpio or pwm Mikhail Kshevetskiy
2026-08-05 12:33 ` [PATCH v10 08/36] pinctrl: airoha: an7583: fix muxing of non-gpio default pins Mikhail Kshevetskiy
2026-08-05 12:33 ` [PATCH v10 09/36] dt-bindings: pinctrl: airoha: an7583: allow configuration of non-gpio default pins as gpio and pwm Mikhail Kshevetskiy
2026-08-06 7:09 ` Krzysztof Kozlowski
2026-08-05 12:33 ` [PATCH v10 10/36] pinctrl: airoha: fix I2C1 pin mux config for AN7581 Mikhail Kshevetskiy
2026-08-05 12:49 ` sashiko-bot
2026-08-05 12:33 ` [PATCH v10 11/36] pinctrl: airoha: fix I2C pin mux config for AN7583 Mikhail Kshevetskiy
2026-08-05 12:57 ` sashiko-bot
2026-08-05 12:33 ` [PATCH v10 12/36] pinctrl: airoha: fix AN7583 MDIO pin mux config Mikhail Kshevetskiy
2026-08-05 12:44 ` sashiko-bot
2026-08-05 12:33 ` [PATCH v10 13/36] pinctrl: airoha: an7583: fix spi group pins Mikhail Kshevetskiy
2026-08-05 12:33 ` [PATCH v10 14/36] pinctrl: airoha: add missed get_direction() function for gpio_chip Mikhail Kshevetskiy
2026-08-05 12:52 ` sashiko-bot
2026-08-05 12:33 ` [PATCH v10 15/36] pinctrl: airoha: add set_direction() helper " Mikhail Kshevetskiy
2026-08-05 12:56 ` sashiko-bot
2026-08-05 12:33 ` [PATCH v10 16/36] pinctrl: airoha: minor improvements Mikhail Kshevetskiy
2026-08-05 12:56 ` sashiko-bot
2026-08-05 12:33 ` [PATCH v10 17/36] pinctrl: airoha: fix getting gpiochip/pinctrl pointers in the IRQ handling code Mikhail Kshevetskiy
2026-08-05 12:33 ` [PATCH v10 18/36] pinctrl: airoha: add missed IRQ resource helpers Mikhail Kshevetskiy
2026-08-05 13:01 ` sashiko-bot
2026-08-05 12:33 ` [PATCH v10 19/36] pinctrl: airoha: fix IRQ mask/unmask code Mikhail Kshevetskiy
2026-08-05 13:01 ` sashiko-bot
2026-08-05 12:33 ` [PATCH v10 20/36] pinctrl: airoha: fix edge-triggered interrupts handling Mikhail Kshevetskiy
2026-08-05 12:54 ` sashiko-bot
2026-08-05 12:33 ` [PATCH v10 21/36] pinctrl: airoha: remove not needed irq_type[] array Mikhail Kshevetskiy
2026-08-05 12:57 ` sashiko-bot
2026-08-05 12:33 ` [PATCH v10 22/36] pinctrl: airoha: statically allocate gpio regs structure Mikhail Kshevetskiy
2026-08-05 12:59 ` sashiko-bot [this message]
2026-08-05 12:33 ` [PATCH v10 23/36] pinctrl: airoha: move common definitions to the separate header Mikhail Kshevetskiy
2026-08-05 12:33 ` [PATCH v10 24/36] pinctrl: airoha: split driver on shared code and SoC specific drivers Mikhail Kshevetskiy
2026-08-05 12:58 ` sashiko-bot
2026-08-05 12:33 ` [PATCH v10 25/36] pinctrl: airoha: an7581: remove en7581 prefix from variable names Mikhail Kshevetskiy
2026-08-05 12:33 ` [PATCH v10 26/36] pinctrl: airoha: an7583: remove an7583 prefix from variable names and definitions Mikhail Kshevetskiy
2026-08-05 12:33 ` [PATCH v10 27/36] pinctrl: airoha: an7583: rename registers to match its an7583 names Mikhail Kshevetskiy
2026-08-05 12:34 ` [PATCH v10 28/36] pinctrl: airoha: an7583: add support for npu_uart pinmux Mikhail Kshevetskiy
2026-08-05 13:04 ` sashiko-bot
2026-08-05 12:34 ` [PATCH v10 29/36] pinctrl: airoha: an7583: add support for pon_alt pinmux Mikhail Kshevetskiy
2026-08-05 13:04 ` sashiko-bot
2026-08-05 12:34 ` [PATCH v10 30/36] pinctrl: airoha: an7583: add support for olt pinmux Mikhail Kshevetskiy
2026-08-05 13:04 ` sashiko-bot
2026-08-05 12:34 ` [PATCH v10 31/36] dt-bindings: pinctrl: airoha: an7583: add missed features Mikhail Kshevetskiy
2026-08-06 7:12 ` Krzysztof Kozlowski
2026-08-05 12:34 ` [PATCH v10 32/36] pinctrl: airoha: add support of en7523 SoC Mikhail Kshevetskiy
2026-08-05 13:08 ` sashiko-bot
2026-08-05 12:34 ` [PATCH v10 33/36] pinctrl: airoha: try to find chip scu node by phandle first Mikhail Kshevetskiy
2026-08-05 13:06 ` sashiko-bot
2026-08-05 12:34 ` [PATCH v10 34/36] dt-bindings: pinctrl: airoha: add support of en7523 pin controller Mikhail Kshevetskiy
2026-08-05 13:06 ` sashiko-bot
2026-08-05 12:34 ` [PATCH v10 35/36] pinctrl: airoha: add support of an7563 SoC Mikhail Kshevetskiy
2026-08-05 13:11 ` sashiko-bot
2026-08-05 12:34 ` [PATCH v10 36/36] dt-bindings: pinctrl: airoha: add support of an7563 pin controller Mikhail Kshevetskiy
2026-08-05 13:06 ` sashiko-bot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260805125923.C10A41F000E9@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=mikhail.kshevetskiy@iopsys.eu \
--cc=robh@kernel.org \
--cc=sashiko-reviews@lists.linux.dev \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).