diff options
author | Sergey Ryazanov <ryazanov.s.a@gmail.com> | 2021-06-08 07:02:41 +0300 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2021-06-08 14:33:43 -0700 |
commit | 504672038b17b76466724dda017618b0c072a922 (patch) | |
tree | e20a071bf2b4a54de8e28149c03e9439bab24301 /drivers/net/wwan/wwan_core.c | |
parent | c230035c2f2f6371739f29e56eeb2611172225c8 (diff) | |
download | linux-504672038b17b76466724dda017618b0c072a922.tar.bz2 |
net: wwan: core: purge rx queue on port close
Purge the rx queue as soon as a user closes the port, just after the
port stop callback invocation. This is to prevent feeding a user that
will open the port next time with outdated and possibly unrelated
data.
While at it also remove the odd skb_queue_purge() call in the port
device destroy callback. The queue will be purged just before the
callback is ivoncated in the wwan_remove_port() function.
Signed-off-by: Sergey Ryazanov <ryazanov.s.a@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/wwan/wwan_core.c')
-rw-r--r-- | drivers/net/wwan/wwan_core.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/drivers/net/wwan/wwan_core.c b/drivers/net/wwan/wwan_core.c index 38da3124d81e..45a41aee8958 100644 --- a/drivers/net/wwan/wwan_core.c +++ b/drivers/net/wwan/wwan_core.c @@ -240,7 +240,6 @@ static void wwan_port_destroy(struct device *dev) ida_free(&minors, MINOR(port->dev.devt)); mutex_destroy(&port->data_lock); - skb_queue_purge(&port->rxq); mutex_destroy(&port->ops_lock); kfree(port); } @@ -462,8 +461,11 @@ static void wwan_port_op_stop(struct wwan_port *port) { mutex_lock(&port->ops_lock); port->start_count--; - if (port->ops && !port->start_count) - port->ops->stop(port); + if (!port->start_count) { + if (port->ops) + port->ops->stop(port); + skb_queue_purge(&port->rxq); + } mutex_unlock(&port->ops_lock); } |