Skip to content

Commit 8e60447

Browse files
edumazetkuba-moo
authored andcommitted
tcp: annotate data-races in tcp_req_diag_fill()
req->num_retrans and rsk_timer.expires are read locklessly, and can be changed from tcp_rtx_synack(). Add READ_ONCE()/WRITE_ONCE() annotations. Signed-off-by: Eric Dumazet <[email protected]> Reviewed-by: Kuniyuki Iwashima <[email protected]> Link: https://patch.msgid.link/[email protected] Signed-off-by: Jakub Kicinski <[email protected]>
1 parent 9a57425 commit 8e60447

File tree

2 files changed

+3
-3
lines changed

2 files changed

+3
-3
lines changed

net/ipv4/tcp_diag.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -248,12 +248,12 @@ static int tcp_req_diag_fill(struct sock *sk, struct sk_buff *skb,
248248
inet_diag_msg_common_fill(r, sk);
249249
r->idiag_state = TCP_SYN_RECV;
250250
r->idiag_timer = 1;
251-
r->idiag_retrans = reqsk->num_retrans;
251+
r->idiag_retrans = READ_ONCE(reqsk->num_retrans);
252252

253253
BUILD_BUG_ON(offsetof(struct inet_request_sock, ir_cookie) !=
254254
offsetof(struct sock, sk_cookie));
255255

256-
tmo = inet_reqsk(sk)->rsk_timer.expires - jiffies;
256+
tmo = READ_ONCE(inet_reqsk(sk)->rsk_timer.expires) - jiffies;
257257
r->idiag_expires = jiffies_delta_to_msecs(tmo);
258258
r->idiag_rqueue = 0;
259259
r->idiag_wqueue = 0;

net/ipv4/tcp_output.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4438,7 +4438,7 @@ int tcp_rtx_synack(const struct sock *sk, struct request_sock *req)
44384438
tcp_sk_rw(sk)->total_retrans++;
44394439
}
44404440
trace_tcp_retransmit_synack(sk, req);
4441-
req->num_retrans++;
4441+
WRITE_ONCE(req->num_retrans, req->num_retrans + 1);
44424442
}
44434443
return res;
44444444
}

0 commit comments

Comments
 (0)