Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a5167c5b authored by Axel Lin's avatar Axel Lin Committed by Matthew Garrett
Browse files

wmi: fix memory leak in parse_wdg



This patch properly kfree out.pointer and gblock in error path.

Signed-off-by: default avatarAxel Lin <axel.lin@gmail.com>
Signed-off-by: default avatarMatthew Garrett <mjg@redhat.com>
parent 410d44c7
Loading
Loading
Loading
Loading
+11 −5
Original line number Diff line number Diff line
@@ -827,8 +827,10 @@ static __init acpi_status parse_wdg(acpi_handle handle)
	total = obj->buffer.length / sizeof(struct guid_block);

	gblock = kmemdup(obj->buffer.pointer, obj->buffer.length, GFP_KERNEL);
	if (!gblock)
		return AE_NO_MEMORY;
	if (!gblock) {
		status = AE_NO_MEMORY;
		goto out_free_pointer;
	}

	for (i = 0; i < total; i++) {
		/*
@@ -848,8 +850,10 @@ static __init acpi_status parse_wdg(acpi_handle handle)
			wmi_dump_wdg(&gblock[i]);

		wblock = kzalloc(sizeof(struct wmi_block), GFP_KERNEL);
		if (!wblock)
			return AE_NO_MEMORY;
		if (!wblock) {
			status = AE_NO_MEMORY;
			goto out_free_gblock;
		}

		wblock->gblock = gblock[i];
		wblock->handle = handle;
@@ -860,8 +864,10 @@ static __init acpi_status parse_wdg(acpi_handle handle)
		list_add_tail(&wblock->list, &wmi_blocks.list);
	}

	kfree(out.pointer);
out_free_gblock:
	kfree(gblock);
out_free_pointer:
	kfree(out.pointer);

	return status;
}