Commit 52861a3b authored by Dan Carpenter's avatar Dan Carpenter Committed by Greg Kroah-Hartman
Browse files

serial: core: don't kfree device managed data



The put_device() function will call serial_base_ctrl_release() or
serial_base_port_release() so these kfrees() are a double free bug.

Fixes: 84a9582f ("serial: core: Start managing serial controllers to enable runtime PM")
Signed-off-by: default avatarDan Carpenter <dan.carpenter@linaro.org>
Reviewed-by: default avatarTony Lindgren <tony@atomide.com>
Message-ID: <ZH7tsTmWY5b/4m+6@moroto>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent b6c7ff26
Loading
Loading
Loading
Loading
+2 −6
Original line number Diff line number Diff line
@@ -98,7 +98,7 @@ struct serial_ctrl_device *serial_base_ctrl_add(struct uart_port *port,
				      serial_base_ctrl_release,
				      port->ctrl_id);
	if (err)
		goto err_free_ctrl_dev;
		goto err_put_device;

	err = device_add(&ctrl_dev->dev);
	if (err)
@@ -108,8 +108,6 @@ struct serial_ctrl_device *serial_base_ctrl_add(struct uart_port *port,

err_put_device:
	put_device(&ctrl_dev->dev);
err_free_ctrl_dev:
	kfree(ctrl_dev);

	return ERR_PTR(err);
}
@@ -140,7 +138,7 @@ struct serial_port_device *serial_base_port_add(struct uart_port *port,
				      serial_base_port_release,
				      port->line);
	if (err)
		goto err_free_port_dev;
		goto err_put_device;

	port_dev->port = port;

@@ -152,8 +150,6 @@ struct serial_port_device *serial_base_port_add(struct uart_port *port,

err_put_device:
	put_device(&port_dev->dev);
err_free_port_dev:
	kfree(port_dev);

	return ERR_PTR(err);
}