platform/x86: think-lmi: Split current_value to reflect only the value
authorMario Limonciello <mario.limonciello@amd.com>
Tue, 22 Jun 2021 20:07:55 +0000 (15:07 -0500)
committerHans de Goede <hdegoede@redhat.com>
Mon, 28 Jun 2021 09:34:45 +0000 (11:34 +0200)
Currently attributes will show things like:
`BootOrderLock,Disable`
rather than just
`Disable`.

Of course this works, but the attribute is intended to be read by
userspace tools and not require further processing.  That is a userspace
tool can display a drop down of `possible_values` and `current_value` is
one of them from the list.

This also aligns `think-lmi` with how `dell-wmi-sysman` works.

Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
Link: https://lore.kernel.org/r/20210622200755.12379-3-mario.limonciello@amd.com
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
drivers/platform/x86/think-lmi.c

index bbfcaf23d4207812b0e518cf4dd0ae3328bb8531..4cab341a35389798715b4395ec8aa486a579faa4 100644 (file)
@@ -492,14 +492,19 @@ static ssize_t display_name_show(struct kobject *kobj, struct kobj_attribute *at
 static ssize_t current_value_show(struct kobject *kobj, struct kobj_attribute *attr, char *buf)
 {
        struct tlmi_attr_setting *setting = to_tlmi_attr_setting(kobj);
-       char *item;
+       char *item, *value;
        int ret;
 
        ret = tlmi_setting(setting->index, &item, LENOVO_BIOS_SETTING_GUID);
        if (ret)
                return ret;
 
-       ret = sysfs_emit(buf, "%s\n", item);
+       /* validate and split from `item,value` -> `value` */
+       value = strpbrk(item, ",");
+       if (!value || value == item || !strlen(value + 1))
+               return -EINVAL;
+
+       ret = sysfs_emit(buf, "%s\n", value + 1);
        kfree(item);
        return ret;
 }