aboutsummaryrefslogtreecommitdiff
path: root/drivers/net/wwan
diff options
context:
space:
mode:
authorSergey Ryazanov2021-06-08 07:02:41 +0300
committerDavid S. Miller2021-06-08 14:33:43 -0700
commit504672038b17b76466724dda017618b0c072a922 (patch)
treee20a071bf2b4a54de8e28149c03e9439bab24301 /drivers/net/wwan
parentc230035c2f2f6371739f29e56eeb2611172225c8 (diff)
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')
-rw-r--r--drivers/net/wwan/wwan_core.c8
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);
}