diff options
Diffstat (limited to 'drivers/hid/hid-core.c')
| -rw-r--r-- | drivers/hid/hid-core.c | 5 | 
1 files changed, 4 insertions, 1 deletions
diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c index 3da354af7a0a..44564f61e9cc 100644 --- a/drivers/hid/hid-core.c +++ b/drivers/hid/hid-core.c @@ -1000,7 +1000,7 @@ int hid_open_report(struct hid_device *device)  	parser = vzalloc(sizeof(struct hid_parser));  	if (!parser) {  		ret = -ENOMEM; -		goto err; +		goto alloc_err;  	}  	parser->device = device; @@ -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,8 @@ 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); +alloc_err:  	vfree(parser);  	hid_close_report(device);  	return ret;  |