Re: [PATCH 10/10] pinctrl: qcom: Check qcom_scm_io_readl() return value in msm_gpio_irq_set_type()

From: Bartosz Golaszewski

Date: Wed Nov 04 2026 - 04:17:09 EST


On Tue, Nov 03, 2026 at 09:29:15PM +0000, Lee Jones wrote:
> In msm_gpio_irq_set_type(), when pctrl->intr_target_use_scm is set, the
> return value of qcom_scm_io_readl(addr, &val) is ignored. If the SCM read
> fails, val remains uninitialised and its stack contents are modified and
> written back to the hardware register via qcom_scm_io_writel().
>
> Check the return value of qcom_scm_io_readl() before modifying and writing
> back val.
>
> Fixes: 13bec8d49bdf ("pinctrl: qcom: use scm_call to route GPIO irq to Apps")
> Closes: https://sashiko.dev/#/bug/linux-a5545ffd-48cc-4856-94cc-4b2dd7968f50
> Cc: stable@xxxxxxxxxxxxxxx
> Signed-off-by: Lee Jones <lee@xxxxxxxxxx>
> ---
> drivers/pinctrl/qcom/pinctrl-msm.c | 10 ++++++----
> 1 file changed, 6 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/pinctrl/qcom/pinctrl-msm.c b/drivers/pinctrl/qcom/pinctrl-msm.c
> index 27f06bbc113c..1b46735fc4bc 100644
> --- a/drivers/pinctrl/qcom/pinctrl-msm.c
> +++ b/drivers/pinctrl/qcom/pinctrl-msm.c
> @@ -1105,11 +1105,13 @@ static int msm_gpio_irq_set_type(struct irq_data *d, unsigned int type)
> u32 addr = pctrl->phys_base[0] + reg;
> int ret;
>
> - qcom_scm_io_readl(addr, &val);
> - val &= ~(intr_target_mask << g->intr_target_bit);
> - val |= g->intr_target_kpss_val << g->intr_target_bit;
> + ret = qcom_scm_io_readl(addr, &val);
> + if (!ret) {
> + val &= ~(intr_target_mask << g->intr_target_bit);
> + val |= g->intr_target_kpss_val << g->intr_target_bit;
>
> - ret = qcom_scm_io_writel(addr, val);
> + ret = qcom_scm_io_writel(addr, val);
> + }
> if (ret)
> dev_err(pctrl->dev,
> "Failed routing %lu interrupt to Apps proc",
> --
> 2.56.0.385.gac671c819a-goog
>

In case Linus wants to apply the entire series at once:

Acked-by: Bartosz Golaszewski <bartosz.golaszewski@xxxxxxxxxxxxxxxx>