HID: fix possible double-free on error path in hid parser

Freeing of device->collection is properly done in hid_free_device() (as
this function is supposed to free all the device resources and could be
called from transport specific code, e.g. usb_hid_configure()).

Remove all kfree() calls preceeding the hid_free_device() call.

Signed-off-by: Jiri Kosina <jkosina@suse.cz>

-5
-5
drivers/hid/hid-core.c
··· 667 668 if (item.format != HID_ITEM_FORMAT_SHORT) { 669 dbg("unexpected long global item"); 670 - kfree(device->collection); 671 hid_free_device(device); 672 kfree(parser); 673 return NULL; ··· 675 if (dispatch_type[item.type](parser, &item)) { 676 dbg("item %u %u %u %u parsing failed\n", 677 item.format, (unsigned)item.size, (unsigned)item.type, (unsigned)item.tag); 678 - kfree(device->collection); 679 hid_free_device(device); 680 kfree(parser); 681 return NULL; ··· 683 if (start == end) { 684 if (parser->collection_stack_ptr) { 685 dbg("unbalanced collection at end of report description"); 686 - kfree(device->collection); 687 hid_free_device(device); 688 kfree(parser); 689 return NULL; 690 } 691 if (parser->local.delimiter_depth) { 692 dbg("unbalanced delimiter at end of report description"); 693 - kfree(device->collection); 694 hid_free_device(device); 695 kfree(parser); 696 return NULL; ··· 699 } 700 701 dbg("item fetching failed at offset %d\n", (int)(end - start)); 702 - kfree(device->collection); 703 hid_free_device(device); 704 kfree(parser); 705 return NULL;
··· 667 668 if (item.format != HID_ITEM_FORMAT_SHORT) { 669 dbg("unexpected long global item"); 670 hid_free_device(device); 671 kfree(parser); 672 return NULL; ··· 676 if (dispatch_type[item.type](parser, &item)) { 677 dbg("item %u %u %u %u parsing failed\n", 678 item.format, (unsigned)item.size, (unsigned)item.type, (unsigned)item.tag); 679 hid_free_device(device); 680 kfree(parser); 681 return NULL; ··· 685 if (start == end) { 686 if (parser->collection_stack_ptr) { 687 dbg("unbalanced collection at end of report description"); 688 hid_free_device(device); 689 kfree(parser); 690 return NULL; 691 } 692 if (parser->local.delimiter_depth) { 693 dbg("unbalanced delimiter at end of report description"); 694 hid_free_device(device); 695 kfree(parser); 696 return NULL; ··· 703 } 704 705 dbg("item fetching failed at offset %d\n", (int)(end - start)); 706 hid_free_device(device); 707 kfree(parser); 708 return NULL;