diff options
author | Eric Dumazet <edumazet@google.com> | 2022-01-13 01:22:29 -0800 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2022-01-13 13:06:05 +0000 |
commit | 91341fa0003befd097e190ec2a4bf63ad957c49a (patch) | |
tree | 9a7ae534e177de1206e62ae6b9f61afdc45a40b5 /net/ipv4/ip_fragment.c | |
parent | 3ba8c6258eb19a6212b066a383788174dd9779ab (diff) | |
download | lwn-91341fa0003befd097e190ec2a4bf63ad957c49a.tar.gz lwn-91341fa0003befd097e190ec2a4bf63ad957c49a.zip |
inet: frags: annotate races around fqdir->dead and fqdir->high_thresh
Both fields can be read/written without synchronization,
add proper accessors and documentation.
Fixes: d5dd88794a13 ("inet: fix various use-after-free in defrags units")
Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv4/ip_fragment.c')
-rw-r--r-- | net/ipv4/ip_fragment.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/net/ipv4/ip_fragment.c b/net/ipv4/ip_fragment.c index cfeb8890f94e..fad803d2d711 100644 --- a/net/ipv4/ip_fragment.c +++ b/net/ipv4/ip_fragment.c @@ -144,7 +144,8 @@ static void ip_expire(struct timer_list *t) rcu_read_lock(); - if (qp->q.fqdir->dead) + /* Paired with WRITE_ONCE() in fqdir_pre_exit(). */ + if (READ_ONCE(qp->q.fqdir->dead)) goto out_rcu_unlock; spin_lock(&qp->q.lock); |