Skip to content

Commit

Permalink
WMI: simplify handling of returned WMI blocks in parse_wdg()
Browse files Browse the repository at this point in the history
There is no reason why we allocate memory and copy data into an
intermediate buffer, it is not like we are working with data coming
from userspace.

Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
Signed-off-by: Matthew Garrett <mjg@redhat.com>
  • Loading branch information
Dmitry Torokhov authored and Matthew Garrett committed Oct 21, 2010
1 parent 3d2c63e commit 3783066
Showing 1 changed file with 4 additions and 11 deletions.
15 changes: 4 additions & 11 deletions drivers/platform/x86/wmi.c
Original file line number Diff line number Diff line change
Expand Up @@ -475,7 +475,7 @@ const struct acpi_buffer *in)
}
EXPORT_SYMBOL_GPL(wmi_set_block);

static void wmi_dump_wdg(struct guid_block *g)
static void wmi_dump_wdg(const struct guid_block *g)
{
char guid_string[37];

Expand Down Expand Up @@ -812,7 +812,7 @@ static acpi_status parse_wdg(acpi_handle handle)
{
struct acpi_buffer out = {ACPI_ALLOCATE_BUFFER, NULL};
union acpi_object *obj;
struct guid_block *gblock;
const struct guid_block *gblock;
struct wmi_block *wblock;
char guid_string[37];
acpi_status status;
Expand All @@ -832,14 +832,9 @@ static acpi_status parse_wdg(acpi_handle handle)
goto out_free_pointer;
}

gblock = (const struct guid_block *)obj->buffer.pointer;
total = obj->buffer.length / sizeof(struct guid_block);

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

for (i = 0; i < total; i++) {
/*
Some WMI devices, like those for nVidia hooks, have a
Expand All @@ -860,7 +855,7 @@ static acpi_status parse_wdg(acpi_handle handle)
wblock = kzalloc(sizeof(struct wmi_block), GFP_KERNEL);
if (!wblock) {
status = AE_NO_MEMORY;
goto out_free_gblock;
goto out_free_pointer;
}

wblock->gblock = gblock[i];
Expand All @@ -872,8 +867,6 @@ static acpi_status parse_wdg(acpi_handle handle)
list_add_tail(&wblock->list, &wmi_blocks.list);
}

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

Expand Down

0 comments on commit 3783066

Please sign in to comment.