Message ID | 20230403013120.2105-2-mpearson-lenovo@squebb.ca (mailing list archive) |
---|---|
State | Accepted, archived |
Headers | show |
Series | [v2,1/2] platform/x86: think-lmi: Fix memory leaks when parsing ThinkStation WMI strings | expand |
On 4/2/23 20:31, Mark Pearson wrote: > On ThinkStations on retrieving the attribute value the BIOS appends the > possible values to the string. > Clean up the display in the current_value_show function so the options > part is not displayed. > > Fixes: a40cd7ef22fb ("platform/x86: think-lmi: Add WMI interface support on Lenovo platforms") > Reported by Mario Limoncello <Mario.Limonciello@amd.com> > Link: https://github.com/fwupd/fwupd/issues/5077#issuecomment-1488730526 > Signed-off-by: Mark Pearson <mpearson-lenovo@squebb.ca> > --- > Changes in v2: For some reason v2 doesn't apply cleanly so rebased and > started again. Hopefully this one works Tested-by: Mario Limonciello <mario.limonciello@amd.com> tested on 6.3rc5 + prerequisite Armin's patch. > > drivers/platform/x86/think-lmi.c | 9 ++++++--- > 1 file changed, 6 insertions(+), 3 deletions(-) > > diff --git a/drivers/platform/x86/think-lmi.c b/drivers/platform/x86/think-lmi.c > index 87f832142d8d..78dc82bda4dd 100644 > --- a/drivers/platform/x86/think-lmi.c > +++ b/drivers/platform/x86/think-lmi.c > @@ -920,7 +920,7 @@ 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, *value; > + char *item, *value, *p; > int ret; > > ret = tlmi_setting(setting->index, &item, LENOVO_BIOS_SETTING_GUID); > @@ -931,9 +931,12 @@ static ssize_t current_value_show(struct kobject *kobj, struct kobj_attribute *a > value = strpbrk(item, ","); > if (!value || value == item || !strlen(value + 1)) > ret = -EINVAL; > - else > + else { > + /* On Workstations remove the Options part after the value */ > + p = strchrnul(value, ';'); > + *p = '\0'; > ret = sysfs_emit(buf, "%s\n", value + 1); > - > + } > kfree(item); > > return ret;
On 3.4.2023. 3:31, Mark Pearson wrote: > On ThinkStations on retrieving the attribute value the BIOS appends the > possible values to the string. > Clean up the display in the current_value_show function so the options > part is not displayed. > > Fixes: a40cd7ef22fb ("platform/x86: think-lmi: Add WMI interface support on Lenovo platforms") > Reported by Mario Limoncello <Mario.Limonciello@amd.com> > Link: https://github.com/fwupd/fwupd/issues/5077#issuecomment-1488730526 > Signed-off-by: Mark Pearson <mpearson-lenovo@squebb.ca> > --- > Changes in v2: For some reason v2 doesn't apply cleanly so rebased and > started again. Hopefully this one works > > drivers/platform/x86/think-lmi.c | 9 ++++++--- > 1 file changed, 6 insertions(+), 3 deletions(-) > > diff --git a/drivers/platform/x86/think-lmi.c b/drivers/platform/x86/think-lmi.c > index 87f832142d8d..78dc82bda4dd 100644 > --- a/drivers/platform/x86/think-lmi.c > +++ b/drivers/platform/x86/think-lmi.c > @@ -920,7 +920,7 @@ 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, *value; > + char *item, *value, *p; > int ret; > > ret = tlmi_setting(setting->index, &item, LENOVO_BIOS_SETTING_GUID); > @@ -931,9 +931,12 @@ static ssize_t current_value_show(struct kobject *kobj, struct kobj_attribute *a > value = strpbrk(item, ","); > if (!value || value == item || !strlen(value + 1)) > ret = -EINVAL; > - else > + else { > + /* On Workstations remove the Options part after the value */ > + p = strchrnul(value, ';'); > + *p = '\0'; > ret = sysfs_emit(buf, "%s\n", value + 1); > - > + } > kfree(item); > > return ret; I can confirm the build against the Torvalds 6.3-rc5 tree and Armin's patch applied w these. [root@pc-mtodorov kernel]# uname -rms Linux 6.3.0-rc5-mt-20230401-00005-g10de4cefccf7 x86_64 [root@pc-mtodorov kernel]# cat /sys/kernel/debug/kmemleak [root@pc-mtodorov kernel]# echo scan > !$ echo scan > /sys/kernel/debug/kmemleak [root@pc-mtodorov kernel]# cat /sys/kernel/debug/kmemleak [root@pc-mtodorov kernel]# echo scan > /sys/kernel/debug/kmemleak [root@pc-mtodorov kernel]# cat /sys/kernel/debug/kmemleak [root@pc-mtodorov kernel]# echo scan > /sys/kernel/debug/kmemleak [root@pc-mtodorov kernel]# cat /sys/kernel/debug/kmemleak [root@pc-mtodorov kernel]# The leak is apparently gone in the original setup that reproduced the leak. At your convenience, you can please add Tested-by: Mirsad Goran Todorovac <mirsad.todorovac@alu.unizg.hr> Have a nice day. Best regards, Mirsad
diff --git a/drivers/platform/x86/think-lmi.c b/drivers/platform/x86/think-lmi.c index 87f832142d8d..78dc82bda4dd 100644 --- a/drivers/platform/x86/think-lmi.c +++ b/drivers/platform/x86/think-lmi.c @@ -920,7 +920,7 @@ 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, *value; + char *item, *value, *p; int ret; ret = tlmi_setting(setting->index, &item, LENOVO_BIOS_SETTING_GUID); @@ -931,9 +931,12 @@ static ssize_t current_value_show(struct kobject *kobj, struct kobj_attribute *a value = strpbrk(item, ","); if (!value || value == item || !strlen(value + 1)) ret = -EINVAL; - else + else { + /* On Workstations remove the Options part after the value */ + p = strchrnul(value, ';'); + *p = '\0'; ret = sysfs_emit(buf, "%s\n", value + 1); - + } kfree(item); return ret;
On ThinkStations on retrieving the attribute value the BIOS appends the possible values to the string. Clean up the display in the current_value_show function so the options part is not displayed. Fixes: a40cd7ef22fb ("platform/x86: think-lmi: Add WMI interface support on Lenovo platforms") Reported by Mario Limoncello <Mario.Limonciello@amd.com> Link: https://github.com/fwupd/fwupd/issues/5077#issuecomment-1488730526 Signed-off-by: Mark Pearson <mpearson-lenovo@squebb.ca> --- Changes in v2: For some reason v2 doesn't apply cleanly so rebased and started again. Hopefully this one works drivers/platform/x86/think-lmi.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-)