From 52861a3be8d6eae5c90963b747c4276ba6059c6b Mon Sep 17 00:00:00 2001 From: Dan Carpenter Date: Tue, 6 Jun 2023 11:26:25 +0300 Subject: [PATCH] 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: 84a9582fd203 ("serial: core: Start managing serial controllers to enable runtime PM") Signed-off-by: Dan Carpenter Reviewed-by: Tony Lindgren Message-ID: Signed-off-by: Greg Kroah-Hartman --- drivers/tty/serial/serial_base_bus.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/drivers/tty/serial/serial_base_bus.c b/drivers/tty/serial/serial_base_bus.c index 9354af7c11af0..9de9f6fa6481f 100644 --- a/drivers/tty/serial/serial_base_bus.c +++ b/drivers/tty/serial/serial_base_bus.c @@ -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); } -- 2.30.2