drivers/tty/serial: extern function which for release resource, need check pointer, before free it
PATCH 1/1 drivers/tty/serial: extern function which for release resource, need check pointer, before free it
for extern function uart_remove_one_port:
need check pointer whether be NULL, before the main work. just like what the other extern function uart_add_one_port has done. uart_add_one_port and uart_remove_one_port are pair
information:
for the callers (such as drivers/tty/serial/jsm: jsm_tty.c, jsm_driver.c) they realy assume that:
they still can call uart_remove_one_port, after uart_add_one_port failed
we (as an extern function), have to understand it (just like kfree).
Signed-off-by Chen Gang <[email protected]>
--- drivers/tty/serial/serial_core.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-)
drivers/tty/serial/serial_core.c +8 -1
@@ -2642,6 +2642,7 @@ int uart_remove_one_port(struct uart_driver *drv, struct uart_port *uport) {struct uart_state *state = drv->state + uport->line;struct tty_port *port = &state->port; +int ret =0 ;BUG_ON (in_interrupt ());
@@ -2656,6 +2657,11 @@ int uart_remove_one_port(struct uart_driver *drv, struct uart_port *uport)* succeeding while we shut down the port. */ mutex_lock (&port->mutex); +if (!state->uart_port) { +mutex_unlock (&port->mutex); + ret = -EINVAL ; + goto out; + } uport->flags |=UPF_DEAD ;mutex_unlock (&port->mutex);
@@ -2679,9 +2685,10 @@ int uart_remove_one_port(struct uart_driver *drv, struct uart_port *uport) uport->type =PORT_UNKNOWN ; state->uart_port =NULL ; +out:mutex_unlock (&port_mutex); -return 0 ; +return ret; }/*
Signature · 1 line
1.7.10.4