[PATCH] tty_port: Restore tty port default ops on unregistering

From: Loic Poulain
Date: Wed Jan 29 2020 - 03:03:34 EST


When a port is unregistered from serdev, its serdev specific client_ops
pointer is nullified, which can lead to future null pointer dereference.
Fix that by restoring default client_ops when port is unregistered from
serdev.

port registering/unregistering can happen several times, at least it
happens when statically registered 8250 ISA port are replaced at boot
time by e.g. device-tree defined 8250 ports.

Signed-off-by: Loic Poulain <loic.poulain@xxxxxxxxxx>
---
drivers/tty/tty_port.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/tty/tty_port.c b/drivers/tty/tty_port.c
index 044c3cb..bf893da 100644
--- a/drivers/tty/tty_port.c
+++ b/drivers/tty/tty_port.c
@@ -203,8 +203,10 @@ void tty_port_unregister_device(struct tty_port *port,
int ret;

ret = serdev_tty_port_unregister(port);
- if (ret == 0)
+ if (ret == 0) {
+ port->client_ops = &default_client_ops;
return;
+ }

tty_unregister_device(driver, index);
}
--
2.7.4