From 2d9535ae0d782b2b1678f5ad0e78bfae99a17156 Mon Sep 17 00:00:00 2001 From: Andrea Righi Date: Fri, 8 Oct 2021 21:44:27 +0200 Subject: [PATCH] Input: elantech - reduce stack usage in elantech_create_smbus() A struct property_entry array can be pretty big to be allocated in the stack. Allocate this array in the heap to prevent potential stack corruptions. Signed-off-by: Andrea Righi --- drivers/input/mouse/elantech.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/drivers/input/mouse/elantech.c b/drivers/input/mouse/elantech.c index 2d0bc029619f..a13aeb3d4961 100644 --- a/drivers/input/mouse/elantech.c +++ b/drivers/input/mouse/elantech.c @@ -1878,12 +1878,17 @@ static int elantech_create_smbus(struct psmouse *psmouse, struct elantech_device_info *info, bool leave_breadcrumbs) { - struct property_entry i2c_props[11] = {}; + struct property_entry *i2c_props; struct i2c_board_info smbus_board = { I2C_BOARD_INFO("elan_i2c", 0x15), .flags = I2C_CLIENT_HOST_NOTIFY, }; unsigned int idx = 0; + int ret; + + i2c_props = kcalloc(11, sizeof(*i2c_props), GFP_KERNEL); + if (!i2c_props) + return -ENOMEM; i2c_props[idx++] = PROPERTY_ENTRY_U32("touchscreen-size-x", info->x_max + 1); @@ -1917,11 +1922,16 @@ static int elantech_create_smbus(struct psmouse *psmouse, i2c_props[idx++] = PROPERTY_ENTRY_BOOL("elan,clickpad"); smbus_board.fwnode = fwnode_create_software_node(i2c_props, NULL); - if (IS_ERR(smbus_board.fwnode)) - return PTR_ERR(smbus_board.fwnode); + if (IS_ERR(smbus_board.fwnode)) { + ret = PTR_ERR(smbus_board.fwnode); + goto out; + } - return psmouse_smbus_init(psmouse, &smbus_board, NULL, 0, false, + ret = psmouse_smbus_init(psmouse, &smbus_board, NULL, 0, false, leave_breadcrumbs); +out: + kfree(i2c_props); + return ret; } /* -- 2.32.0