summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefan Agner <stefan@agner.ch>2018-08-28 13:29:54 +0200
committerJiri Kosina <jkosina@suse.cz>2018-08-28 14:07:16 +0200
commitb2dd9f2e5a8a4a6afa9d41411cdbfc2f5ceeba71 (patch)
tree4b6c5124e572372f3d9fd332b149ca11be0511f5
parente38c0ac55ee67cf3626cfbc2283f8873dc44d370 (diff)
downloadlinux-b2dd9f2e5a8a4a6afa9d41411cdbfc2f5ceeba71.tar.bz2
HID: core: fix memory leak on probe
The dynamically allocted collection stack does not get freed in all situations. Make sure to also free the collection stack when using the parser in hid_open_report(). Fixes: 08a8a7cf1459 ("HID: core: do not upper bound the collection stack") Signed-off-by: Stefan Agner <stefan@agner.ch> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
-rw-r--r--drivers/hid/hid-core.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
index 3da354af7a0a..44a465db3f96 100644
--- a/drivers/hid/hid-core.c
+++ b/drivers/hid/hid-core.c
@@ -1039,6 +1039,7 @@ int hid_open_report(struct hid_device *device)
hid_err(device, "unbalanced delimiter at end of report description\n");
goto err;
}
+ kfree(parser->collection_stack);
vfree(parser);
device->status |= HID_STAT_PARSED;
return 0;
@@ -1047,6 +1048,7 @@ int hid_open_report(struct hid_device *device)
hid_err(device, "item fetching failed at offset %d\n", (int)(end - start));
err:
+ kfree(parser->collection_stack);
vfree(parser);
hid_close_report(device);
return ret;