diff options
author | Jiri Kosina <jkosina@suse.cz> | 2023-01-06 15:49:55 +0100 |
---|---|---|
committer | Jiri Kosina <jkosina@suse.cz> | 2023-01-06 15:49:55 +0100 |
commit | f1f73651a0849c26b735e7cc1543fa650162b51c (patch) | |
tree | 50dc9ae0c2605ca1d2c16038359cf4405db60fbe /drivers/hid/hid-sensor-custom.c | |
parent | c8aca355bdd56e5dad55897cc419ea5d3e4c0e58 (diff) | |
download | lwn-f1f73651a0849c26b735e7cc1543fa650162b51c.tar.gz lwn-f1f73651a0849c26b735e7cc1543fa650162b51c.zip |
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>
Diffstat (limited to 'drivers/hid/hid-sensor-custom.c')
-rw-r--r-- | drivers/hid/hid-sensor-custom.c | 21 |
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 * |