All of lore.kernel.org
 help / color / mirror / Atom feed
From: Baruch Siach <baruch@tkos.co.il>
To: Yun Zhou <yun.zhou@windriver.com>
Cc: <linusw@kernel.org>,  <brgl@kernel.org>,
	 <linux-gpio@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
	Andrew Lunn <andrew@lunn.ch>
Subject: Re: [PATCH] gpio: mvebu: fix NULL pointer dereference in suspend/resume
Date: Mon, 08 Jun 2026 11:26:31 +0300	[thread overview]
Message-ID: <87ik7t8mko.fsf@tarshish> (raw)
In-Reply-To: <20260608075742.2680700-1-yun.zhou@windriver.com> (Yun Zhou's message of "Mon, 8 Jun 2026 15:57:42 +0800")

Hi Yun Zhou,

On Mon, Jun 08 2026, Yun Zhou wrote:
> mvebu_pwm_suspend() and mvebu_pwm_resume() are called for all GPIO
> banks during suspend/resume, but not all banks have PWM functionality.
> GPIO banks without PWM have mvchip->mvpwm set to NULL.
>
> Calling mvebu_pwm_suspend() with mvpwm == NULL causes a NULL pointer
> dereference when it tries to access mvpwm->blink_select.
>
>   Unable to handle kernel NULL pointer dereference at virtual address 00000020 when write
>   [00000020] *pgd=00000000
>   Internal error: Oops: 815 [#1] PREEMPT ARM
>   Modules linked in:
>   CPU: 0 UID: 0 PID: 406 Comm: sh Not tainted 6.12.74-rt12-yocto-standard-g4e96f98fb7db-dirty #353
>   Hardware name: Marvell Armada 370/XP (Device Tree)
>   PC is at regmap_mmio_read+0x38/0x54
>   LR is at regmap_mmio_read+0x38/0x54
>   pc : [<c05fd2ac>]    lr : [<c05fd2ac>]    psr: 200f0013
>   sp : f0c11d10  ip : 00000000  fp : c100d2f0
>   r10: c14fb854  r9 : 00000000  r8 : 00000000
>   r7 : c1799c00  r6 : 00000020  r5 : 00000020  r4 : c179c7c0
>   r3 : f0a231a0  r2 : 00000020  r1 : 00000020  r0 : 00000000
>   Flags: nzCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment none
>   Control: 10c5387d  Table: 135ec059  DAC: 00000051
>   Call trace:
>    regmap_mmio_read from _regmap_bus_reg_read+0x78/0xac
>    _regmap_bus_reg_read from _regmap_read+0x60/0x154
>    _regmap_read from regmap_read+0x3c/0x60
>    regmap_read from mvebu_gpio_suspend+0xa4/0x14c
>    mvebu_gpio_suspend from dpm_run_callback+0x54/0x180
>    dpm_run_callback from device_suspend+0x124/0x630
>    device_suspend from dpm_suspend+0x124/0x270
>    dpm_suspend from dpm_suspend_start+0x64/0x6c
>    dpm_suspend_start from suspend_devices_and_enter+0x140/0x8e8
>    suspend_devices_and_enter from pm_suspend+0x2fc/0x308
>    pm_suspend from state_store+0x6c/0xc8
>    state_store from kernfs_fop_write_iter+0x10c/0x1f8
>    kernfs_fop_write_iter from vfs_write+0x270/0x468
>    vfs_write from ksys_write+0x70/0xf0
>    ksys_write from ret_fast_syscall+0x0/0x54
>
> Add a NULL check for mvchip->mvpwm before calling the PWM
> suspend/resume functions.
>
> Fixes: 85b7d8abfec7 ("gpio: mvebu: add pwm support for Armada 370/XP/38x")

Commit summary for 85b7d8abfec7 is "gpio: mvebu: add pwm support for
Armada 8K/7K". I could not find a commit matching the summary line above
in upstream git. Commit 757642f9a584e ("gpio: mvebu: Add limited PWM
support") introduced mvebu_pwm_suspend() and mvebu_pwm_resume(). I think
that is the one being fixed.

baruch

> Signed-off-by: Yun Zhou <yun.zhou@windriver.com>
> ---
>  drivers/gpio/gpio-mvebu.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpio/gpio-mvebu.c b/drivers/gpio/gpio-mvebu.c
> index 22c36b79e249..c030d1f00abc 100644
> --- a/drivers/gpio/gpio-mvebu.c
> +++ b/drivers/gpio/gpio-mvebu.c
> @@ -996,7 +996,7 @@ static int mvebu_gpio_suspend(struct platform_device *pdev, pm_message_t state)
>  		BUG();
>  	}
>  
> -	if (IS_REACHABLE(CONFIG_PWM))
> +	if (IS_REACHABLE(CONFIG_PWM) && mvchip->mvpwm)
>  		mvebu_pwm_suspend(mvchip);
>  
>  	return 0;
> @@ -1048,7 +1048,7 @@ static int mvebu_gpio_resume(struct platform_device *pdev)
>  		BUG();
>  	}
>  
> -	if (IS_REACHABLE(CONFIG_PWM))
> +	if (IS_REACHABLE(CONFIG_PWM) && mvchip->mvpwm)
>  		mvebu_pwm_resume(mvchip);
>  
>  	return 0;

-- 
                                                     ~. .~   Tk Open Systems
=}------------------------------------------------ooO--U--Ooo------------{=
   - baruch@tkos.co.il - tel: +972.52.368.4656, http://www.tkos.co.il -

  reply	other threads:[~2026-06-08  8:26 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-06-08  7:57 [PATCH] gpio: mvebu: fix NULL pointer dereference in suspend/resume Yun Zhou
2026-06-08  8:26 ` Baruch Siach [this message]
2026-06-08  8:37   ` Zhou, Yun

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=87ik7t8mko.fsf@tarshish \
    --to=baruch@tkos.co.il \
    --cc=andrew@lunn.ch \
    --cc=brgl@kernel.org \
    --cc=linusw@kernel.org \
    --cc=linux-gpio@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=yun.zhou@windriver.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.