diff options
| -rw-r--r-- | net/xfrm/espintcp.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/net/xfrm/espintcp.c b/net/xfrm/espintcp.c index e618f7626482..6e3a62660a93 100644 --- a/net/xfrm/espintcp.c +++ b/net/xfrm/espintcp.c @@ -38,6 +38,11 @@ static void handle_esp(struct sk_buff *skb, struct sock *sk) rcu_read_lock(); skb->dev = dev_get_by_index_rcu(sock_net(sk), skb->skb_iif); + if (!skb->dev) { + XFRM_INC_STATS(sock_net(sk), LINUX_MIB_XFRMINERROR); + kfree_skb(skb); + goto out; + } local_bh_disable(); #if IS_ENABLED(CONFIG_IPV6) if (sk->sk_family == AF_INET6) @@ -46,6 +51,7 @@ static void handle_esp(struct sk_buff *skb, struct sock *sk) #endif xfrm4_rcv_encap(skb, IPPROTO_ESP, 0, TCP_ENCAP_ESPINTCP); local_bh_enable(); +out: rcu_read_unlock(); } |
