summaryrefslogtreecommitdiff
path: root/drivers/tty
diff options
context:
space:
mode:
authorDan Carpenter <dan.carpenter@linaro.org>2023-06-06 11:26:25 +0300
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2023-06-06 15:46:35 +0300
commit52861a3be8d6eae5c90963b747c4276ba6059c6b (patch)
treee209353fcde20bcf735e3bc7338988c87c4ce2d5 /drivers/tty
parentb6c7ff2693ddc24cdad3b032d969303f7b2ae3da (diff)
downloadlinux-52861a3be8d6eae5c90963b747c4276ba6059c6b.tar.xz
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 <dan.carpenter@linaro.org> Reviewed-by: Tony Lindgren <tony@atomide.com> Message-ID: <ZH7tsTmWY5b/4m+6@moroto> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/tty')
-rw-r--r--drivers/tty/serial/serial_base_bus.c8
1 files changed, 2 insertions, 6 deletions
diff --git a/drivers/tty/serial/serial_base_bus.c b/drivers/tty/serial/serial_base_bus.c
index 9354af7c11af..9de9f6fa6481 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);
}