FAILED: patch "[PATCH] platform/x86: think-lmi: Fix sysfs group cleanup" failed to apply to 5.15-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 5.15-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-5.15.y
git checkout FETCH_HEAD
git cherry-pick -x 4f30f946f27b7f044cf8f3f1f353dee1dcd3517a
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2025070829-barometer-imagines-9277@gregkh' --subject-prefix 'PATCH 5.15.y' HEAD^..
Possible dependencies:
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 4f30f946f27b7f044cf8f3f1f353dee1dcd3517a Mon Sep 17 00:00:00 2001
From: Kurt Borja <[email protected]>
Date: Mon, 30 Jun 2025 14:31:21 -0300
Subject: [PATCH] platform/x86: think-lmi: Fix sysfs group cleanup
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Many error paths in tlmi_sysfs_init() lead to sysfs groups being removed when they were not even created.
Fix this by letting the kobject core manage these groups through their kobj_type's defult_groups.
drivers/platform/x86/think-lmi.c +4 -39
@@ -973,6 +973,7 @@ static const struct attribute_group auth_attr_group = { .is_visible = auth_attr_is_visible, .attrs = auth_attrs, }; +__ATTRIBUTE_GROUPS (auth_attr);/* ---- Attributes sysfs --------------------------------------------------------- */ static ssize_t display_name_show(struct kobject *kobj, struct kobj_attribute *attr,
@@ -1188,6 +1189,7 @@ static const struct attribute_group tlmi_attr_group = { .is_visible = attr_is_visible, .attrs = tlmi_attrs, }; +__ATTRIBUTE_GROUPS (tlmi_attr);static void tlmi_attr_setting_release (struct kobject *kobj) {
@@ -1207,11 +1209,13 @@ static void tlmi_pwd_setting_release(struct kobject *kobj)static const struct kobj_type tlmi_attr_setting_ktype = { .release = &tlmi_attr_setting_release, .sysfs_ops = &kobj_sysfs_ops, + .default_groups = tlmi_attr_groups, };static const struct kobj_type tlmi_pwd_setting_ktype = { .release = &tlmi_pwd_setting_release, .sysfs_ops = &kobj_sysfs_ops, + .default_groups = auth_attr_groups, }; static ssize_t pending_reboot_show(struct kobject *kobj, struct kobj_attribute *attr,
@@ -1381,14 +1385,8 @@ static struct kobj_attribute debug_cmd = __ATTR_WO(debug_cmd);static void tlmi_release_attr (void ) {struct kobject *pos, *n; -int i;/* Attribute structures */ -for (i =0 ; i <TLMI_SETTINGS_COUNT ; i++) { -if (tlmi_priv.setting[i]) { -sysfs_remove_group (&tlmi_priv.setting[i]->kobj, &tlmi_attr_group); - } - }sysfs_remove_file (&tlmi_priv.attribute_kset->kobj, &pending_reboot.attr);sysfs_remove_file (&tlmi_priv.attribute_kset->kobj, &save_settings.attr);
@@ -1405,15 +1403,6 @@ static void tlmi_release_attr(void)kfree (tlmi_priv.pwd_admin->save_signature);/* Authentication structures */ -sysfs_remove_group (&tlmi_priv.pwd_admin->kobj, &auth_attr_group); -sysfs_remove_group (&tlmi_priv.pwd_power->kobj, &auth_attr_group); - -if (tlmi_priv.opcode_support) { -sysfs_remove_group (&tlmi_priv.pwd_system->kobj, &auth_attr_group); -sysfs_remove_group (&tlmi_priv.pwd_hdd->kobj, &auth_attr_group); -sysfs_remove_group (&tlmi_priv.pwd_nvme->kobj, &auth_attr_group); - } -list_for_each_entry_safe (pos, n, &tlmi_priv.authentication_kset->list, entry)kobject_put (pos);
@@ -1484,10 +1473,6 @@ static int tlmi_sysfs_init(void) NULL, "%s", tlmi_priv.setting[i]->display_name);if (ret) goto fail_create_attr; - - ret =sysfs_create_group (&tlmi_priv.setting[i]->kobj, &tlmi_attr_group); -if (ret) - goto fail_create_attr; } ret =sysfs_create_file (&tlmi_priv.attribute_kset->kobj, &pending_reboot.attr);
@@ -1511,20 +1496,12 @@ static int tlmi_sysfs_init(void)if (ret) goto fail_create_attr; - ret =sysfs_create_group (&tlmi_priv.pwd_admin->kobj, &auth_attr_group); -if (ret) - goto fail_create_attr; - tlmi_priv.pwd_power->kobj.kset = tlmi_priv.authentication_kset; ret =kobject_init_and_add (&tlmi_priv.pwd_power->kobj, &tlmi_pwd_setting_ktype,NULL ,"%s" ,"Power-on" );if (ret) goto fail_create_attr; - ret =sysfs_create_group (&tlmi_priv.pwd_power->kobj, &auth_attr_group); -if (ret) - goto fail_create_attr; -if (tlmi_priv.opcode_support) { tlmi_priv.pwd_system->kobj.kset = tlmi_priv.authentication_kset; ret = kobject_init_and_add(&tlmi_priv.pwd_system->kobj, &tlmi_pwd_setting_ktype,
@@ -1532,29 +1509,17 @@ static int tlmi_sysfs_init(void)if (ret) goto fail_create_attr; - ret =sysfs_create_group (&tlmi_priv.pwd_system->kobj, &auth_attr_group); -if (ret) - goto fail_create_attr; - tlmi_priv.pwd_hdd->kobj.kset = tlmi_priv.authentication_kset; ret =kobject_init_and_add (&tlmi_priv.pwd_hdd->kobj, &tlmi_pwd_setting_ktype,NULL ,"%s" ,"HDD" );if (ret) goto fail_create_attr; - ret =sysfs_create_group (&tlmi_priv.pwd_hdd->kobj, &auth_attr_group); -if (ret) - goto fail_create_attr; - tlmi_priv.pwd_nvme->kobj.kset = tlmi_priv.authentication_kset; ret =kobject_init_and_add (&tlmi_priv.pwd_nvme->kobj, &tlmi_pwd_setting_ktype,NULL ,"%s" ,"NVMe" );if (ret) goto fail_create_attr; - - ret =sysfs_create_group (&tlmi_priv.pwd_nvme->kobj, &auth_attr_group); -if (ret) - goto fail_create_attr; }return ret;