[PATCH 4/7] soc: aspeed: lpc-snoop: Constrain parameters in channel paths

Andrew Jeffery andrew at codeconstruct.com.au
Thu Apr 10 18:08:34 PDT 2025


Ensure pointers and the channel index are valid before use.

Fixes: 9f4f9ae81d0a ("drivers/misc: add Aspeed LPC snoop driver")
Signed-off-by: Andrew Jeffery <andrew at codeconstruct.com.au>
---
 drivers/soc/aspeed/aspeed-lpc-snoop.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/drivers/soc/aspeed/aspeed-lpc-snoop.c b/drivers/soc/aspeed/aspeed-lpc-snoop.c
index 28f034b8a3b7226efe20cbe30a7da0c2b49fbd96..6ab362aeb180c8ad356422d8257717f41a232b3c 100644
--- a/drivers/soc/aspeed/aspeed-lpc-snoop.c
+++ b/drivers/soc/aspeed/aspeed-lpc-snoop.c
@@ -182,6 +182,7 @@ static int aspeed_lpc_snoop_config_irq(struct aspeed_lpc_snoop *lpc_snoop,
 	return 0;
 }
 
+__attribute__((nonnull))
 static int aspeed_lpc_enable_snoop(struct aspeed_lpc_snoop *lpc_snoop,
 				   struct device *dev,
 				   int channel, u16 lpc_port)
@@ -190,6 +191,8 @@ static int aspeed_lpc_enable_snoop(struct aspeed_lpc_snoop *lpc_snoop,
 	u32 hicr5_en, snpwadr_mask, snpwadr_shift, hicrb_en;
 	int rc = 0;
 
+	if (channel < 0 || channel >= ARRAY_SIZE(lpc_snoop->chan))
+		return -EINVAL;
 
 	if (lpc_snoop->chan[channel].enabled)
 		return -EBUSY;
@@ -252,9 +255,13 @@ static int aspeed_lpc_enable_snoop(struct aspeed_lpc_snoop *lpc_snoop,
 	return rc;
 }
 
+__attribute__((nonnull))
 static void aspeed_lpc_disable_snoop(struct aspeed_lpc_snoop *lpc_snoop,
 				     int channel)
 {
+	if (channel < 0 || channel >= ARRAY_SIZE(lpc_snoop->chan))
+		return;
+
 	if (!lpc_snoop->chan[channel].enabled)
 		return;
 

-- 
2.39.5




More information about the linux-arm-kernel mailing list