From: Andrew Jeffery <andrew@codeconstruct.com.au>
To: linux-aspeed@lists.ozlabs.org
Cc: Joel Stanley <joel@jms.id.au>,
Henry Martin <bsdhenrymartin@gmail.com>,
Jean Delvare <jdelvare@suse.de>,
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-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org,
Andrew Jeffery <andrew@codeconstruct.com.au>,
stable@vger.kernel.org
Subject: [PATCH v2 02/10] soc: aspeed: lpc-snoop: Don't disable channels that aren't enabled
Date: Mon, 16 Jun 2025 22:43:39 +0930 [thread overview]
Message-ID: <20250616-aspeed-lpc-snoop-fixes-v2-2-3cdd59c934d3@codeconstruct.com.au> (raw)
In-Reply-To: <20250616-aspeed-lpc-snoop-fixes-v2-0-3cdd59c934d3@codeconstruct.com.au>
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>
Acked-by: 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 59c18afa649cd672f54f947066f468f2a78c0d5d..fc3a2c41cc10739f5f70ded7ac02baab6468d652 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 (WARN_ON(lpc_snoop->chan[channel].enabled))
+ return -EBUSY;
+
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);
}
--
2.39.5
next prev parent reply other threads:[~2025-06-16 13:14 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-06-16 13:13 [PATCH v2 00/10] soc: aspeed: lpc-snoop: Miscellaneous fixes Andrew Jeffery
2025-06-16 13:13 ` [PATCH v2 01/10] soc: aspeed: lpc-snoop: Cleanup resources in stack-order Andrew Jeffery
2025-06-16 13:13 ` Andrew Jeffery [this message]
2025-06-16 13:13 ` [PATCH v2 03/10] soc: aspeed: lpc-snoop: Ensure model_data is valid Andrew Jeffery
2025-06-16 13:13 ` [PATCH v2 04/10] soc: aspeed: lpc-snoop: Constrain parameters in channel paths Andrew Jeffery
2025-07-04 16:44 ` Jean Delvare
2025-07-08 2:06 ` Andrew Jeffery
2025-06-16 13:13 ` [PATCH v2 05/10] soc: aspeed: lpc-snoop: Rename 'channel' to 'index' " Andrew Jeffery
2025-06-16 13:13 ` [PATCH v2 06/10] soc: aspeed: lpc-snoop: Rearrange " Andrew Jeffery
2025-07-04 15:34 ` Jean Delvare
2025-07-08 2:06 ` Andrew Jeffery
2025-06-16 13:13 ` [PATCH v2 07/10] soc: aspeed: lpc-snoop: Switch to devm_clk_get_enabled() Andrew Jeffery
2025-07-04 14:42 ` Jean Delvare
2025-06-16 13:13 ` [PATCH v2 08/10] soc: aspeed: lpc-snoop: Use dev_err_probe() where possible Andrew Jeffery
2025-07-04 14:46 ` Jean Delvare
2025-06-16 13:13 ` [PATCH v2 09/10] soc: aspeed: lpc-snoop: Consolidate channel initialisation Andrew Jeffery
2025-07-04 15:13 ` Jean Delvare
2025-07-08 2:06 ` Andrew Jeffery
2025-06-16 13:13 ` [PATCH v2 10/10] soc: aspeed: lpc-snoop: Lift channel config to const structs Andrew Jeffery
2025-07-04 16:23 ` Jean Delvare
2025-07-08 2:07 ` 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=20250616-aspeed-lpc-snoop-fixes-v2-2-3cdd59c934d3@codeconstruct.com.au \
--to=andrew@codeconstruct.com.au \
--cc=bsdhenrymartin@gmail.com \
--cc=geissonator@yahoo.com \
--cc=jdelvare@suse.de \
--cc=joel@jms.id.au \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-aspeed@lists.ozlabs.org \
--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 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).