Skip to content

Commit 75bfb05

Browse files
ffmanceragregkh
authored andcommitted
netfilter: nft_synproxy: avoid possible data-race on update operation
[ Upstream commit 36a3200 ] During nft_synproxy eval we are reading nf_synproxy_info struct which can be modified on update operation concurrently. As nf_synproxy_info struct fits in 32 bits, use READ_ONCE/WRITE_ONCE annotations. Fixes: ee394f9 ("netfilter: nft_synproxy: add synproxy stateful object support") Signed-off-by: Fernando Fernandez Mancera <fmancera@suse.de> Signed-off-by: Florian Westphal <fw@strlen.de> Signed-off-by: Sasha Levin <sashal@kernel.org>
1 parent 704c025 commit 75bfb05

1 file changed

Lines changed: 3 additions & 3 deletions

File tree

net/netfilter/nft_synproxy.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ static void nft_synproxy_eval_v4(const struct nft_synproxy *priv,
4848
struct tcphdr *_tcph,
4949
struct synproxy_options *opts)
5050
{
51-
struct nf_synproxy_info info = priv->info;
51+
struct nf_synproxy_info info = READ_ONCE(priv->info);
5252
struct net *net = nft_net(pkt);
5353
struct synproxy_net *snet = synproxy_pernet(net);
5454
struct sk_buff *skb = pkt->skb;
@@ -79,7 +79,7 @@ static void nft_synproxy_eval_v6(const struct nft_synproxy *priv,
7979
struct tcphdr *_tcph,
8080
struct synproxy_options *opts)
8181
{
82-
struct nf_synproxy_info info = priv->info;
82+
struct nf_synproxy_info info = READ_ONCE(priv->info);
8383
struct net *net = nft_net(pkt);
8484
struct synproxy_net *snet = synproxy_pernet(net);
8585
struct sk_buff *skb = pkt->skb;
@@ -340,7 +340,7 @@ static void nft_synproxy_obj_update(struct nft_object *obj,
340340
struct nft_synproxy *newpriv = nft_obj_data(newobj);
341341
struct nft_synproxy *priv = nft_obj_data(obj);
342342

343-
priv->info = newpriv->info;
343+
WRITE_ONCE(priv->info, newpriv->info);
344344
}
345345

346346
static struct nft_object_type nft_synproxy_obj_type;

0 commit comments

Comments
 (0)