mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-08-31 03:35:32 -04:00
HID: sensor: custom: Fix field sysfs group cleanup on failure
hid_sensor_custom_add_attributes() creates one sysfs group for each
custom sensor field. If sysfs_create_group() fails after some groups
have already been created, the function returns the error without
removing the previously created groups.
Add a local unwind path to remove the groups that were already created.
With enable_sensor exposed only after the field attributes are ready,
this path can free sensor_inst->fields without leaving enable_sensor
able to access pointers into that array.
Fixes: 4a7de0519d ("HID: sensor: Custom and Generic sensor support")
Cc: stable@vger.kernel.org
Signed-off-by: Haoxiang Li <haoxiang_li2024@163.com>
Acked-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
Signed-off-by: Jiri Kosina <jkosina@suse.com>
This commit is contained in:
@@ -609,7 +609,7 @@ static int hid_sensor_custom_add_attributes(struct hid_sensor_custom
|
||||
&sensor_inst->fields[i].
|
||||
hid_custom_attribute_group);
|
||||
if (ret)
|
||||
break;
|
||||
goto err_remove_groups;
|
||||
|
||||
/* For power or report field store indexes */
|
||||
if (sensor_inst->fields[i].attribute.attrib_id ==
|
||||
@@ -621,6 +621,13 @@ static int hid_sensor_custom_add_attributes(struct hid_sensor_custom
|
||||
}
|
||||
|
||||
return ret;
|
||||
|
||||
err_remove_groups:
|
||||
while (--i >= 0)
|
||||
sysfs_remove_group(&sensor_inst->pdev->dev.kobj,
|
||||
&sensor_inst->fields[i].hid_custom_attribute_group);
|
||||
kfree(sensor_inst->fields);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void hid_sensor_custom_remove_attributes(struct hid_sensor_custom *
|
||||
|
||||
Reference in New Issue
Block a user