fix for a memory leak in an error case introduced by fix for double free

The fix NULLed a pointer without freeing it.

Signed-off-by: Oliver Neukum <oneukum@suse.de>
Reported-by: Juha Motorsportcom <juha_motorsportcom@luukku.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

authored by

Oliver Neukum and committed by
Linus Torvalds
852fef69 9ee08c2d

+8 -6
+8 -6
drivers/usb/serial/ipaq.c
··· 651 651 */ 652 652 653 653 kfree(port->bulk_in_buffer); 654 - port->bulk_in_buffer = kmalloc(URBDATA_SIZE, GFP_KERNEL); 655 - if (port->bulk_in_buffer == NULL) { 656 - port->bulk_out_buffer = NULL; /* prevent double free */ 657 - goto enomem; 658 - } 659 - 660 654 kfree(port->bulk_out_buffer); 655 + /* make sure the generic serial code knows */ 656 + port->bulk_out_buffer = NULL; 657 + 658 + port->bulk_in_buffer = kmalloc(URBDATA_SIZE, GFP_KERNEL); 659 + if (port->bulk_in_buffer == NULL) 660 + goto enomem; 661 + 661 662 port->bulk_out_buffer = kmalloc(URBDATA_SIZE, GFP_KERNEL); 662 663 if (port->bulk_out_buffer == NULL) { 664 + /* the buffer is useless, free it */ 663 665 kfree(port->bulk_in_buffer); 664 666 port->bulk_in_buffer = NULL; 665 667 goto enomem;