Commit 01641b26 authored by Andy Shevchenko's avatar Andy Shevchenko Committed by Wolfram Sang

i2c: i801: Avoid memory leak in check_acpi_smo88xx_device()

check_acpi_smo88xx_device() utilizes acpi_get_object_info() which in its turn
allocates a buffer. User is responsible to clean allocated resources. The last
has been missed in the original code. Fix it here.

While here, replace !ACPI_SUCCESS() with ACPI_FAILURE().

Fixes: 19b07cb4 ("i2c: i801: Register optional lis3lv02d I2C device on Dell machines")
Signed-off-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: default avatarPali Rohár <pali.rohar@gmail.com>
Reviewed-by: default avatarJean Delvare <jdelvare@suse.de>
Signed-off-by: default avatarWolfram Sang <wsa@the-dreams.de>
parent 689f5358
...@@ -1194,19 +1194,28 @@ static acpi_status check_acpi_smo88xx_device(acpi_handle obj_handle, ...@@ -1194,19 +1194,28 @@ static acpi_status check_acpi_smo88xx_device(acpi_handle obj_handle,
int i; int i;
status = acpi_get_object_info(obj_handle, &info); status = acpi_get_object_info(obj_handle, &info);
if (!ACPI_SUCCESS(status) || !(info->valid & ACPI_VALID_HID)) if (ACPI_FAILURE(status))
return AE_OK; return AE_OK;
if (!(info->valid & ACPI_VALID_HID))
goto smo88xx_not_found;
hid = info->hardware_id.string; hid = info->hardware_id.string;
if (!hid) if (!hid)
return AE_OK; goto smo88xx_not_found;
i = match_string(acpi_smo8800_ids, ARRAY_SIZE(acpi_smo8800_ids), hid); i = match_string(acpi_smo8800_ids, ARRAY_SIZE(acpi_smo8800_ids), hid);
if (i < 0) if (i < 0)
return AE_OK; goto smo88xx_not_found;
kfree(info);
*((bool *)return_value) = true; *((bool *)return_value) = true;
return AE_CTRL_TERMINATE; return AE_CTRL_TERMINATE;
smo88xx_not_found:
kfree(info);
return AE_OK;
} }
static bool is_dell_system_with_lis3lv02d(void) static bool is_dell_system_with_lis3lv02d(void)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment