Commit 86126b77 authored by Florian Westphal's avatar Florian Westphal Committed by Steffen Klassert

xfrm: free skb if nlsk pointer is NULL

nlmsg_multicast() always frees the skb, so in case we cannot call
it we must do that ourselves.

Fixes: 21ee543e ("xfrm: fix race between netns cleanup and state expire notification")
Signed-off-by: default avatarFlorian Westphal <fw@strlen.de>
Signed-off-by: default avatarSteffen Klassert <steffen.klassert@secunet.com>
parent 8cc88773
...@@ -1025,10 +1025,12 @@ static inline int xfrm_nlmsg_multicast(struct net *net, struct sk_buff *skb, ...@@ -1025,10 +1025,12 @@ static inline int xfrm_nlmsg_multicast(struct net *net, struct sk_buff *skb,
{ {
struct sock *nlsk = rcu_dereference(net->xfrm.nlsk); struct sock *nlsk = rcu_dereference(net->xfrm.nlsk);
if (nlsk) if (!nlsk) {
kfree_skb(skb);
return -EPIPE;
}
return nlmsg_multicast(nlsk, skb, pid, group, GFP_ATOMIC); return nlmsg_multicast(nlsk, skb, pid, group, GFP_ATOMIC);
else
return -1;
} }
static inline unsigned int xfrm_spdinfo_msgsize(void) static inline unsigned int xfrm_spdinfo_msgsize(void)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment