Skip to content

Commit

Permalink
i2c: i801: Avoid memory leak in check_acpi_smo88xx_device()
Browse files Browse the repository at this point in the history
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: 19b07cb ("i2c: i801: Register optional lis3lv02d I2C device on Dell machines")
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: Pali Rohár <pali.rohar@gmail.com>
Reviewed-by: Jean Delvare <jdelvare@suse.de>
Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
  • Loading branch information
Andy Shevchenko authored and Wolfram Sang committed Aug 29, 2019
1 parent 689f535 commit 01641b2
Showing 1 changed file with 12 additions and 3 deletions.
15 changes: 12 additions & 3 deletions drivers/i2c/busses/i2c-i801.c
Original file line number Diff line number Diff line change
Expand Up @@ -1194,19 +1194,28 @@ static acpi_status check_acpi_smo88xx_device(acpi_handle obj_handle,
int i;

status = acpi_get_object_info(obj_handle, &info);
if (!ACPI_SUCCESS(status) || !(info->valid & ACPI_VALID_HID))
if (ACPI_FAILURE(status))
return AE_OK;

if (!(info->valid & ACPI_VALID_HID))
goto smo88xx_not_found;

hid = info->hardware_id.string;
if (!hid)
return AE_OK;
goto smo88xx_not_found;

i = match_string(acpi_smo8800_ids, ARRAY_SIZE(acpi_smo8800_ids), hid);
if (i < 0)
return AE_OK;
goto smo88xx_not_found;

kfree(info);

*((bool *)return_value) = true;
return AE_CTRL_TERMINATE;

smo88xx_not_found:
kfree(info);
return AE_OK;
}

static bool is_dell_system_with_lis3lv02d(void)
Expand Down

0 comments on commit 01641b2

Please sign in to comment.