Skip to content

Commit 86126b7

Browse files
Florian Westphalklassert
authored andcommitted
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: 21ee543 ("xfrm: fix race between netns cleanup and state expire notification") Signed-off-by: Florian Westphal <fw@strlen.de> Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
1 parent 8cc8877 commit 86126b7

1 file changed

Lines changed: 6 additions & 4 deletions

File tree

net/xfrm/xfrm_user.c

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1025,10 +1025,12 @@ static inline int xfrm_nlmsg_multicast(struct net *net, struct sk_buff *skb,
10251025
{
10261026
struct sock *nlsk = rcu_dereference(net->xfrm.nlsk);
10271027

1028-
if (nlsk)
1029-
return nlmsg_multicast(nlsk, skb, pid, group, GFP_ATOMIC);
1030-
else
1031-
return -1;
1028+
if (!nlsk) {
1029+
kfree_skb(skb);
1030+
return -EPIPE;
1031+
}
1032+
1033+
return nlmsg_multicast(nlsk, skb, pid, group, GFP_ATOMIC);
10321034
}
10331035

10341036
static inline unsigned int xfrm_spdinfo_msgsize(void)

0 commit comments

Comments
 (0)