Skip to content

Commit 8b26ff7

Browse files
Florian Westphalummakynes
authored andcommitted
netfilter: nft_socket: fix sk refcount leaks
We must put 'sk' reference before returning. Fixes: 039b1f4 ("netfilter: nft_socket: fix erroneous socket assignment") Signed-off-by: Florian Westphal <[email protected]> Signed-off-by: Pablo Neira Ayuso <[email protected]>
1 parent d759ee2 commit 8b26ff7

File tree

1 file changed

+4
-3
lines changed

1 file changed

+4
-3
lines changed

net/netfilter/nft_socket.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -110,21 +110,21 @@ static void nft_socket_eval(const struct nft_expr *expr,
110110
*dest = READ_ONCE(sk->sk_mark);
111111
} else {
112112
regs->verdict.code = NFT_BREAK;
113-
return;
113+
goto out_put_sk;
114114
}
115115
break;
116116
case NFT_SOCKET_WILDCARD:
117117
if (!sk_fullsock(sk)) {
118118
regs->verdict.code = NFT_BREAK;
119-
return;
119+
goto out_put_sk;
120120
}
121121
nft_socket_wildcard(pkt, regs, sk, dest);
122122
break;
123123
#ifdef CONFIG_SOCK_CGROUP_DATA
124124
case NFT_SOCKET_CGROUPV2:
125125
if (!nft_sock_get_eval_cgroupv2(dest, sk, pkt, priv->level)) {
126126
regs->verdict.code = NFT_BREAK;
127-
return;
127+
goto out_put_sk;
128128
}
129129
break;
130130
#endif
@@ -133,6 +133,7 @@ static void nft_socket_eval(const struct nft_expr *expr,
133133
regs->verdict.code = NFT_BREAK;
134134
}
135135

136+
out_put_sk:
136137
if (sk != skb->sk)
137138
sock_gen_put(sk);
138139
}

0 commit comments

Comments
 (0)