[<prev] [next>] [day] [month] [year] [list]
Message-Id: <20250322131841.31711-1-purvayeshi550@gmail.com>
Date: Sat, 22 Mar 2025 18:48:41 +0530
From: Purva Yeshi <purvayeshi550@...il.com>
To: Peter Tyser <ptyser@...-inc.com>,
Lee Jones <lee@...nel.org>
Cc: linux-kernel@...r.kernel.org,
Purva Yeshi <purvayeshi550@...il.com>
Subject: [PATCH] mfd: lpc_ich: Fix ARRAY_SIZE usage for apl_gpio_resources
Fix warning detected by smatch tool:
drivers/mfd/lpc_ich.c:194:34: error: strange non-value function or array
drivers/mfd/lpc_ich.c:194:34: error: missing type information
drivers/mfd/lpc_ich.c:201:34: error: strange non-value function or array
drivers/mfd/lpc_ich.c:201:34: error: missing type information
drivers/mfd/lpc_ich.c:208:34: error: strange non-value function or array
drivers/mfd/lpc_ich.c:208:34: error: missing type information
drivers/mfd/lpc_ich.c:215:34: error: strange non-value function or array
drivers/mfd/lpc_ich.c:215:34: error: missing type information
Use of the ARRAY_SIZE macro on the two-dimensional array apl_gpio_resources
led to incorrect calculations of num_resources, as ARRAY_SIZE only works
for one-dimensional arrays. It attempts to determine the size of the inner
array but does not correctly compute the total number of elements, leading
to incorrect indexing and potential out-of-bounds access.
This resulted in incorrect resource allocation, causing errors.
Replace ARRAY_SIZE(apl_gpio_resources[APL_GPIO_NORTH]) with ARRAY2D_SIZE,
which correctly calculates the number of elements in a 2D array by
considering both rows and columns, ensuring num_resources is assigned the
correct value.
Signed-off-by: Purva Yeshi <purvayeshi550@...il.com>
---
drivers/mfd/lpc_ich.c | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/drivers/mfd/lpc_ich.c b/drivers/mfd/lpc_ich.c
index 4b7d0cb9340f..f0b8ff9ed177 100644
--- a/drivers/mfd/lpc_ich.c
+++ b/drivers/mfd/lpc_ich.c
@@ -187,32 +187,34 @@ static struct resource *apl_gpio_mem_resources[APL_GPIO_NR_RESOURCES] = {
[APL_GPIO_SOUTHWEST] = &apl_gpio_resources[APL_GPIO_SOUTHWEST][0],
};
+#define ARRAY2D_SIZE(arr) (sizeof(arr) / sizeof((arr)[0][0]) / (sizeof((arr)[0]) / sizeof((arr)[0][0])))
+
static const struct mfd_cell apl_gpio_devices[APL_GPIO_NR_DEVICES] = {
[APL_GPIO_NORTH] = {
.name = "apollolake-pinctrl",
.id = APL_GPIO_NORTH,
- .num_resources = ARRAY_SIZE(apl_gpio_resources[APL_GPIO_NORTH]),
+ .num_resources = ARRAY2D_SIZE(apl_gpio_resources),
.resources = apl_gpio_resources[APL_GPIO_NORTH],
.ignore_resource_conflicts = true,
},
[APL_GPIO_NORTHWEST] = {
.name = "apollolake-pinctrl",
.id = APL_GPIO_NORTHWEST,
- .num_resources = ARRAY_SIZE(apl_gpio_resources[APL_GPIO_NORTHWEST]),
+ .num_resources = ARRAY2D_SIZE(apl_gpio_resources),
.resources = apl_gpio_resources[APL_GPIO_NORTHWEST],
.ignore_resource_conflicts = true,
},
[APL_GPIO_WEST] = {
.name = "apollolake-pinctrl",
.id = APL_GPIO_WEST,
- .num_resources = ARRAY_SIZE(apl_gpio_resources[APL_GPIO_WEST]),
+ .num_resources = ARRAY2D_SIZE(apl_gpio_resources),
.resources = apl_gpio_resources[APL_GPIO_WEST],
.ignore_resource_conflicts = true,
},
[APL_GPIO_SOUTHWEST] = {
.name = "apollolake-pinctrl",
.id = APL_GPIO_SOUTHWEST,
- .num_resources = ARRAY_SIZE(apl_gpio_resources[APL_GPIO_SOUTHWEST]),
+ .num_resources = ARRAY2D_SIZE(apl_gpio_resources),
.resources = apl_gpio_resources[APL_GPIO_SOUTHWEST],
.ignore_resource_conflicts = true,
},
--
2.34.1
Powered by blists - more mailing lists