]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
platform/x86: lenovo-wmi-helpers: Fix memory leak in lwmi_dev_evaluate_int()
authorRong Zhang <i@rong.moe>
Sun, 10 May 2026 04:25:31 +0000 (04:25 +0000)
committerIlpo Järvinen <ilpo.jarvinen@linux.intel.com>
Mon, 11 May 2026 11:28:58 +0000 (14:28 +0300)
lwmi_dev_evaluate_int() leaks output.pointer when retval == NULL (found
by sashiko.dev [1]).

Fix it by moving `ret_obj = output.pointer' outside of the `if (retval)'
block so that it is always freed by the __free cleanup callback.

No functional change intended.

Reviewed-by: Mark Pearson <mpearson-lenovo@squebb.ca>
Fixes: e521d16e76cd ("platform/x86: Add lenovo-wmi-helpers")
Cc: stable@vger.kernel.org
Link: https://sashiko.dev/#/patchset/20260331181208.421552-1-derekjohn.clark%40gmail.com
Signed-off-by: Rong Zhang <i@rong.moe>
Signed-off-by: Derek J. Clark <derekjohn.clark@gmail.com>
Link: https://patch.msgid.link/20260510042546.436874-2-derekjohn.clark@gmail.com
Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
drivers/platform/x86/lenovo/wmi-helpers.c

index 7379defac50028b14c4b54f520e38dd3d9c46e49..018d7642e2bd5bdceffa088c641f1ec52a5b43f6 100644 (file)
@@ -46,7 +46,6 @@ int lwmi_dev_evaluate_int(struct wmi_device *wdev, u8 instance, u32 method_id,
                          unsigned char *buf, size_t size, u32 *retval)
 {
        struct acpi_buffer output = { ACPI_ALLOCATE_BUFFER, NULL };
-       union acpi_object *ret_obj __free(kfree) = NULL;
        struct acpi_buffer input = { size, buf };
        acpi_status status;
 
@@ -55,8 +54,9 @@ int lwmi_dev_evaluate_int(struct wmi_device *wdev, u8 instance, u32 method_id,
        if (ACPI_FAILURE(status))
                return -EIO;
 
+       union acpi_object *ret_obj __free(kfree) = output.pointer;
+
        if (retval) {
-               ret_obj = output.pointer;
                if (!ret_obj)
                        return -ENODATA;