diff options
author | Eric Dumazet <edumazet@google.com> | 2020-05-07 18:32:21 +0200 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2020-05-08 03:11:07 +0200 |
commit | f78ed2204db9fc35b545d693865bddbe0149aa1f (patch) | |
tree | 547a43f4bee21b4880397429cca2a02ab85f397c /net/core/netpoll.c | |
parent | netpoll: netpoll_send_skb() returns transmit status (diff) | |
download | linux-f78ed2204db9fc35b545d693865bddbe0149aa1f.tar.xz linux-f78ed2204db9fc35b545d693865bddbe0149aa1f.zip |
netpoll: accept NULL np argument in netpoll_send_skb()
netpoll_send_skb() callers seem to leak skb if
the np pointer is NULL. While this should not happen, we
can make the code more robust.
Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/core/netpoll.c')
-rw-r--r-- | net/core/netpoll.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/net/core/netpoll.c b/net/core/netpoll.c index 40d2753aa47d..093e90e52bc2 100644 --- a/net/core/netpoll.c +++ b/net/core/netpoll.c @@ -367,9 +367,14 @@ netdev_tx_t netpoll_send_skb(struct netpoll *np, struct sk_buff *skb) unsigned long flags; netdev_tx_t ret; - local_irq_save(flags); - ret = __netpoll_send_skb(np, skb); - local_irq_restore(flags); + if (unlikely(!np)) { + dev_kfree_skb_irq(skb); + ret = NET_XMIT_DROP; + } else { + local_irq_save(flags); + ret = __netpoll_send_skb(np, skb); + local_irq_restore(flags); + } return ret; } EXPORT_SYMBOL(netpoll_send_skb); |