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>
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)
err_put_device:
put_device(&ctrl_dev->dev);
-err_free_ctrl_dev:
- kfree(ctrl_dev);
return ERR_PTR(err);
}
serial_base_port_release,
port->line);
if (err)
- goto err_free_port_dev;
+ goto err_put_device;
port_dev->port = port;
err_put_device:
put_device(&port_dev->dev);
-err_free_port_dev:
- kfree(port_dev);
return ERR_PTR(err);
}