All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jean Delvare <jdelvare@suse.de>
To: Andrew Jeffery <andrew@codeconstruct.com.au>
Cc: Joel Stanley <joel@jms.id.au>,
	Henry Martin <bsdhenrymartin@gmail.com>,
	Patrick Rudolph <patrick.rudolph@9elements.com>,
	Andrew Geissler <geissonator@yahoo.com>,
	Ninad Palsule <ninad@linux.ibm.com>,
	Patrick Venture <venture@google.com>,
	Robert Lippert <roblip@gmail.com>,
	linux-kernel@vger.kernel.org, stable@vger.kernel.org
Subject: Re: [PATCH 2/7] soc: aspeed: lpc-snoop: Don't disable channels that aren't enabled
Date: Wed, 16 Apr 2025 14:15:06 +0200	[thread overview]
Message-ID: <20250416141506.2d910334@endymion> (raw)
In-Reply-To: <20250411-aspeed-lpc-snoop-fixes-v1-2-64f522e3ad6f@codeconstruct.com.au>

On Fri, 11 Apr 2025 10:38:32 +0930, Andrew Jeffery wrote:
> Mitigate e.g. the following:
> 
>     # echo 1e789080.lpc-snoop > /sys/bus/platform/drivers/aspeed-lpc-snoop/unbind
>     ...
>     [  120.363594] Unable to handle kernel NULL pointer dereference at virtual address 00000004 when write
>     [  120.373866] [00000004] *pgd=00000000
>     [  120.377910] Internal error: Oops: 805 [#1] SMP ARM
>     [  120.383306] CPU: 1 UID: 0 PID: 315 Comm: sh Not tainted 6.15.0-rc1-00009-g926217bc7d7d-dirty #20 NONE
>     ...
>     [  120.679543] Call trace:
>     [  120.679559]  misc_deregister from aspeed_lpc_snoop_remove+0x84/0xac
>     [  120.692462]  aspeed_lpc_snoop_remove from platform_remove+0x28/0x38
>     [  120.700996]  platform_remove from device_release_driver_internal+0x188/0x200
>     ...
> 
> Fixes: 9f4f9ae81d0a ("drivers/misc: add Aspeed LPC snoop driver")
> Cc: stable@vger.kernel.org
> Cc: Jean Delvare <jdelvare@suse.de>
> Signed-off-by: Andrew Jeffery <andrew@codeconstruct.com.au>
> ---
>  drivers/soc/aspeed/aspeed-lpc-snoop.c | 11 +++++++++++
>  1 file changed, 11 insertions(+)
> 
> diff --git a/drivers/soc/aspeed/aspeed-lpc-snoop.c b/drivers/soc/aspeed/aspeed-lpc-snoop.c
> index bfa770ec51a889260d11c26e675f3320bf710a54..e9d9a8e60a6f062c0b53c9c02e5d73768453998d 100644
> --- a/drivers/soc/aspeed/aspeed-lpc-snoop.c
> +++ b/drivers/soc/aspeed/aspeed-lpc-snoop.c
> @@ -58,6 +58,7 @@ struct aspeed_lpc_snoop_model_data {
>  };
>  
>  struct aspeed_lpc_snoop_channel {
> +	bool enabled;
>  	struct kfifo		fifo;
>  	wait_queue_head_t	wq;
>  	struct miscdevice	miscdev;
> @@ -190,6 +191,9 @@ static int aspeed_lpc_enable_snoop(struct aspeed_lpc_snoop *lpc_snoop,
>  	const struct aspeed_lpc_snoop_model_data *model_data =
>  		of_device_get_match_data(dev);
>  
> +	if (lpc_snoop->chan[channel].enabled)
> +		return -EBUSY;

This isn't supposed to happen, right? WARN_ON() may be appropriate.

> +
>  	init_waitqueue_head(&lpc_snoop->chan[channel].wq);
>  	/* Create FIFO datastructure */
>  	rc = kfifo_alloc(&lpc_snoop->chan[channel].fifo,
> @@ -236,6 +240,8 @@ static int aspeed_lpc_enable_snoop(struct aspeed_lpc_snoop *lpc_snoop,
>  		regmap_update_bits(lpc_snoop->regmap, HICRB,
>  				hicrb_en, hicrb_en);
>  
> +	lpc_snoop->chan[channel].enabled = true;
> +
>  	return 0;
>  
>  err_misc_deregister:
> @@ -248,6 +254,9 @@ static int aspeed_lpc_enable_snoop(struct aspeed_lpc_snoop *lpc_snoop,
>  static void aspeed_lpc_disable_snoop(struct aspeed_lpc_snoop *lpc_snoop,
>  				     int channel)
>  {
> +	if (!lpc_snoop->chan[channel].enabled)
> +		return;
> +
>  	switch (channel) {
>  	case 0:
>  		regmap_update_bits(lpc_snoop->regmap, HICR5,
> @@ -263,6 +272,8 @@ static void aspeed_lpc_disable_snoop(struct aspeed_lpc_snoop *lpc_snoop,
>  		return;
>  	}
>  
> +	lpc_snoop->chan[channel].enabled = false;
> +	/* Consider improving safety wrt concurrent reader(s) */
>  	misc_deregister(&lpc_snoop->chan[channel].miscdev);
>  	kfifo_free(&lpc_snoop->chan[channel].fifo);
>  }
> 

Acked-by: Jean Delvare <jdelvare@suse.de>

-- 
Jean Delvare
SUSE L3 Support

  reply	other threads:[~2025-04-16 12:15 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-04-11  1:08 [PATCH 0/7] soc: aspeed: lpc-snoop: Miscellaneous fixes Andrew Jeffery
2025-04-11  1:08 ` [PATCH 1/7] soc: aspeed: lpc-snoop: Cleanup resources in stack-order Andrew Jeffery
2025-04-16 12:03   ` Jean Delvare
2025-04-11  1:08 ` [PATCH 2/7] soc: aspeed: lpc-snoop: Don't disable channels that aren't enabled Andrew Jeffery
2025-04-16 12:15   ` Jean Delvare [this message]
2025-04-16 23:33     ` Andrew Jeffery
2025-04-11  1:08 ` [PATCH 3/7] soc: aspeed: lpc-snoop: Ensure model_data is valid Andrew Jeffery
2025-04-16 12:19   ` Jean Delvare
2025-04-16 23:34     ` Andrew Jeffery
2025-04-11  1:08 ` [PATCH 4/7] soc: aspeed: lpc-snoop: Constrain parameters in channel paths Andrew Jeffery
2025-04-16 12:37   ` Jean Delvare
2025-04-16 23:37     ` Andrew Jeffery
2025-04-11  1:08 ` [PATCH 5/7] soc: aspeed: lpc-snoop: Rename 'channel' to 'index' " Andrew Jeffery
2025-04-16 12:42   ` Jean Delvare
2025-04-11  1:08 ` [PATCH 6/7] soc: aspeed: lpc-snoop: Rearrange " Andrew Jeffery
2025-04-17  9:52   ` Jean Delvare
2025-04-11  1:08 ` [PATCH 7/7] soc: aspeed: lpc-snoop: Lift channel config to const structs Andrew Jeffery
2025-04-17 10:49   ` Jean Delvare
2025-04-29  2:58     ` Andrew Jeffery

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=20250416141506.2d910334@endymion \
    --to=jdelvare@suse.de \
    --cc=andrew@codeconstruct.com.au \
    --cc=bsdhenrymartin@gmail.com \
    --cc=geissonator@yahoo.com \
    --cc=joel@jms.id.au \
    --cc=linux-kernel@vger.kernel.org \
    --cc=ninad@linux.ibm.com \
    --cc=patrick.rudolph@9elements.com \
    --cc=roblip@gmail.com \
    --cc=stable@vger.kernel.org \
    --cc=venture@google.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.