summaryrefslogtreecommitdiff
path: root/drivers/net/pfcp.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/pfcp.c')
-rw-r--r--drivers/net/pfcp.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/net/pfcp.c b/drivers/net/pfcp.c
index 51c67c914fad..0c511b988e05 100644
--- a/drivers/net/pfcp.c
+++ b/drivers/net/pfcp.c
@@ -81,7 +81,7 @@ static int pfcp_encap_recv(struct sock *sk, struct sk_buff *skb)
md = ip_tunnel_info_opts(&tun_dst->u.tun_info);
if (unlikely(!md))
- goto drop;
+ goto drop_dst;
if (unparsed->flags & PFCP_SEID_FLAG)
pfcp_session_recv(pfcp, skb, md);
@@ -94,7 +94,7 @@ static int pfcp_encap_recv(struct sock *sk, struct sk_buff *skb)
if (unlikely(iptunnel_pull_header(skb, PFCP_HLEN, skb->protocol,
!net_eq(sock_net(sk),
dev_net(pfcp->dev)))))
- goto drop;
+ goto drop_dst;
skb_dst_set(skb, (struct dst_entry *)tun_dst);
@@ -105,6 +105,8 @@ static int pfcp_encap_recv(struct sock *sk, struct sk_buff *skb)
gro_cells_receive(&pfcp->gro_cells, skb);
return 0;
+drop_dst:
+ dst_release(&tun_dst->dst);
drop:
kfree_skb(skb);
return 0;