From f1f73651a0849c26b735e7cc1543fa650162b51c Mon Sep 17 00:00:00 2001 From: Jiri Kosina Date: Fri, 6 Jan 2023 15:49:55 +0100 Subject: HID: hid-sensor-custom: Fix big on-stack allocation in hid_sensor_custom_get_known() struct hid_sensor_custom_properties is currently 384 bytes big, which consumes too much stack space for no good reason. Make it dynamically allocated. Fixes: 98c062e824519 ("HID: hid-sensor-custom: Allow more custom iio sensors") Reported-by: kernel test robot Signed-off-by: Jiri Kosina --- drivers/hid/hid-sensor-custom.c | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/drivers/hid/hid-sensor-custom.c b/drivers/hid/hid-sensor-custom.c index 0c287dde345c..3e3f89e01d81 100644 --- a/drivers/hid/hid-sensor-custom.c +++ b/drivers/hid/hid-sensor-custom.c @@ -911,21 +911,28 @@ hid_sensor_custom_get_known(struct hid_sensor_hub_device *hsdev, int ret; const struct hid_sensor_custom_match *match = hid_sensor_custom_known_table; - struct hid_sensor_custom_properties prop; + struct hid_sensor_custom_properties *prop; - ret = hid_sensor_custom_properties_get(hsdev, &prop); + prop = kmalloc(sizeof(struct hid_sensor_custom_properties), GFP_KERNEL); + if (!prop) + return -ENOMEM; + + ret = hid_sensor_custom_properties_get(hsdev, prop); if (ret < 0) - return ret; + goto out; while (match->tag) { - if (hid_sensor_custom_do_match(hsdev, match, &prop)) { + if (hid_sensor_custom_do_match(hsdev, match, prop)) { *known = match; - return 0; + ret = 0; + goto out; } match++; } - - return -ENODATA; + ret = -ENODATA; +out: + kfree(prop); + return ret; } static struct platform_device * -- cgit v1.2.3