summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJiri Kosina <jkosina@suse.cz>2023-01-06 15:49:55 +0100
committerJiri Kosina <jkosina@suse.cz>2023-01-06 15:49:55 +0100
commitf1f73651a0849c26b735e7cc1543fa650162b51c (patch)
tree50dc9ae0c2605ca1d2c16038359cf4405db60fbe
parentc8aca355bdd56e5dad55897cc419ea5d3e4c0e58 (diff)
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 <lkp@intel.com> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
-rw-r--r--drivers/hid/hid-sensor-custom.c21
1 files 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 *