summaryrefslogtreecommitdiff
path: root/drivers/platform
diff options
context:
space:
mode:
authorAleksandr Mishin <amishin@t-argos.ru>2024-08-30 09:54:28 +0300
committerIlpo Järvinen <ilpo.jarvinen@linux.intel.com>2024-08-30 12:58:18 +0300
commitffc17e1479e8e9459b7afa80e5d9d40d0dd78abb (patch)
treeaefffd31474661b39f4f099306673aad08fe7088 /drivers/platform
parenta3379eca24a7da5118a7d090da6f8eb8611acac8 (diff)
downloadlwn-ffc17e1479e8e9459b7afa80e5d9d40d0dd78abb.tar.gz
lwn-ffc17e1479e8e9459b7afa80e5d9d40d0dd78abb.zip
platform/x86: dell-smbios: Fix error path in dell_smbios_init()
In case of error in build_tokens_sysfs(), all the memory that has been allocated is freed at end of this function. But then free_group() is called which performs memory deallocation again. Also, instead of free_group() call, there should be exit_dell_smbios_smm() and exit_dell_smbios_wmi() calls, since there is initialization, but there is no release of resources in case of an error. Fix these issues by replacing free_group() call with exit_dell_smbios_wmi() and exit_dell_smbios_smm(). Found by Linux Verification Center (linuxtesting.org) with SVACE. Fixes: 33b9ca1e53b4 ("platform/x86: dell-smbios: Add a sysfs interface for SMBIOS tokens") Signed-off-by: Aleksandr Mishin <amishin@t-argos.ru> Link: https://lore.kernel.org/r/20240830065428.9544-1-amishin@t-argos.ru Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com> Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Diffstat (limited to 'drivers/platform')
-rw-r--r--drivers/platform/x86/dell/dell-smbios-base.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/drivers/platform/x86/dell/dell-smbios-base.c b/drivers/platform/x86/dell/dell-smbios-base.c
index 6565fac24cde..73e41eb69cb5 100644
--- a/drivers/platform/x86/dell/dell-smbios-base.c
+++ b/drivers/platform/x86/dell/dell-smbios-base.c
@@ -622,7 +622,10 @@ static int __init dell_smbios_init(void)
return 0;
fail_sysfs:
- free_group(platform_device);
+ if (!wmi)
+ exit_dell_smbios_wmi();
+ if (!smm)
+ exit_dell_smbios_smm();
fail_create_group:
platform_device_del(platform_device);