forked from Minki/linux
mptcp: Consistently use READ_ONCE/WRITE_ONCE with msk->ack_seq
The msk->ack_seq value is sometimes read without the msk lock held, so make proper use of READ_ONCE and WRITE_ONCE. Signed-off-by: Mat Martineau <mathew.j.martineau@linux.intel.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
4972c6ccf9
commit
917944da3b
@ -518,11 +518,11 @@ static bool mptcp_established_options_dss(struct sock *sk, struct sk_buff *skb,
|
||||
|
||||
if (subflow->use_64bit_ack) {
|
||||
ack_size = TCPOLEN_MPTCP_DSS_ACK64;
|
||||
opts->ext_copy.data_ack = msk->ack_seq;
|
||||
opts->ext_copy.data_ack = READ_ONCE(msk->ack_seq);
|
||||
opts->ext_copy.ack64 = 1;
|
||||
} else {
|
||||
ack_size = TCPOLEN_MPTCP_DSS_ACK32;
|
||||
opts->ext_copy.data_ack32 = (uint32_t)(msk->ack_seq);
|
||||
opts->ext_copy.data_ack32 = (uint32_t)READ_ONCE(msk->ack_seq);
|
||||
opts->ext_copy.ack64 = 0;
|
||||
}
|
||||
opts->ext_copy.use_ack = 1;
|
||||
|
@ -123,7 +123,7 @@ static void __mptcp_move_skb(struct mptcp_sock *msk, struct sock *ssk,
|
||||
|
||||
skb_ext_reset(skb);
|
||||
skb_orphan(skb);
|
||||
msk->ack_seq += copy_len;
|
||||
WRITE_ONCE(msk->ack_seq, msk->ack_seq + copy_len);
|
||||
|
||||
tail = skb_peek_tail(&sk->sk_receive_queue);
|
||||
if (offset == 0 && tail) {
|
||||
@ -261,7 +261,7 @@ static void mptcp_check_data_fin(struct sock *sk)
|
||||
if (mptcp_pending_data_fin(sk, &rcv_data_fin_seq)) {
|
||||
struct mptcp_subflow_context *subflow;
|
||||
|
||||
msk->ack_seq++;
|
||||
WRITE_ONCE(msk->ack_seq, msk->ack_seq + 1);
|
||||
WRITE_ONCE(msk->rcv_data_fin, 0);
|
||||
|
||||
sk->sk_shutdown |= RCV_SHUTDOWN;
|
||||
@ -1720,7 +1720,7 @@ struct sock *mptcp_sk_clone(const struct sock *sk,
|
||||
msk->remote_key = mp_opt->sndr_key;
|
||||
mptcp_crypto_key_sha(msk->remote_key, NULL, &ack_seq);
|
||||
ack_seq++;
|
||||
msk->ack_seq = ack_seq;
|
||||
WRITE_ONCE(msk->ack_seq, ack_seq);
|
||||
}
|
||||
|
||||
sock_reset_flag(nsk, SOCK_RCU_FREE);
|
||||
@ -2072,7 +2072,7 @@ bool mptcp_finish_join(struct sock *sk)
|
||||
parent_sock = READ_ONCE(parent->sk_socket);
|
||||
if (parent_sock && !sk->sk_socket)
|
||||
mptcp_sock_graft(sk, parent_sock);
|
||||
subflow->map_seq = msk->ack_seq;
|
||||
subflow->map_seq = READ_ONCE(msk->ack_seq);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user