mirror of https://gitee.com/openkylin/linux.git
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>
This commit is contained in:
parent
9ee08c2df4
commit
852fef69c0
|
@ -651,15 +651,17 @@ static int ipaq_open(struct tty_struct *tty,
|
||||||
*/
|
*/
|
||||||
|
|
||||||
kfree(port->bulk_in_buffer);
|
kfree(port->bulk_in_buffer);
|
||||||
port->bulk_in_buffer = kmalloc(URBDATA_SIZE, GFP_KERNEL);
|
|
||||||
if (port->bulk_in_buffer == NULL) {
|
|
||||||
port->bulk_out_buffer = NULL; /* prevent double free */
|
|
||||||
goto enomem;
|
|
||||||
}
|
|
||||||
|
|
||||||
kfree(port->bulk_out_buffer);
|
kfree(port->bulk_out_buffer);
|
||||||
|
/* make sure the generic serial code knows */
|
||||||
|
port->bulk_out_buffer = NULL;
|
||||||
|
|
||||||
|
port->bulk_in_buffer = kmalloc(URBDATA_SIZE, GFP_KERNEL);
|
||||||
|
if (port->bulk_in_buffer == NULL)
|
||||||
|
goto enomem;
|
||||||
|
|
||||||
port->bulk_out_buffer = kmalloc(URBDATA_SIZE, GFP_KERNEL);
|
port->bulk_out_buffer = kmalloc(URBDATA_SIZE, GFP_KERNEL);
|
||||||
if (port->bulk_out_buffer == NULL) {
|
if (port->bulk_out_buffer == NULL) {
|
||||||
|
/* the buffer is useless, free it */
|
||||||
kfree(port->bulk_in_buffer);
|
kfree(port->bulk_in_buffer);
|
||||||
port->bulk_in_buffer = NULL;
|
port->bulk_in_buffer = NULL;
|
||||||
goto enomem;
|
goto enomem;
|
||||||
|
|
Loading…
Reference in New Issue