Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
[sfrench/cifs-2.6.git] / net / mptcp / options.c
index e3e96a49f92296aed056137a815f0e2a30b8407c..23e317ffc9015b6660cf77b30a57780d52081af5 100644 (file)
@@ -689,8 +689,8 @@ static bool mptcp_established_options_add_addr(struct sock *sk, struct sk_buff *
        opts->suboptions |= OPTION_MPTCP_ADD_ADDR;
        if (!echo) {
                MPTCP_INC_STATS(sock_net(sk), MPTCP_MIB_ADDADDRTX);
-               opts->ahmac = add_addr_generate_hmac(msk->local_key,
-                                                    msk->remote_key,
+               opts->ahmac = add_addr_generate_hmac(READ_ONCE(msk->local_key),
+                                                    READ_ONCE(msk->remote_key),
                                                     &opts->addr);
        } else {
                MPTCP_INC_STATS(sock_net(sk), MPTCP_MIB_ECHOADDTX);
@@ -792,7 +792,7 @@ static bool mptcp_established_options_fastclose(struct sock *sk,
 
        *size = TCPOLEN_MPTCP_FASTCLOSE;
        opts->suboptions |= OPTION_MPTCP_FASTCLOSE;
-       opts->rcvr_key = msk->remote_key;
+       opts->rcvr_key = READ_ONCE(msk->remote_key);
 
        pr_debug("FASTCLOSE key=%llu", opts->rcvr_key);
        MPTCP_INC_STATS(sock_net(sk), MPTCP_MIB_MPFASTCLOSETX);
@@ -1031,7 +1031,7 @@ u64 __mptcp_expand_seq(u64 old_seq, u64 cur_seq)
 static void __mptcp_snd_una_update(struct mptcp_sock *msk, u64 new_snd_una)
 {
        msk->bytes_acked += new_snd_una - msk->snd_una;
-       msk->snd_una = new_snd_una;
+       WRITE_ONCE(msk->snd_una, new_snd_una);
 }
 
 static void ack_update_msk(struct mptcp_sock *msk,
@@ -1058,10 +1058,10 @@ static void ack_update_msk(struct mptcp_sock *msk,
        new_wnd_end = new_snd_una + tcp_sk(ssk)->snd_wnd;
 
        if (after64(new_wnd_end, msk->wnd_end))
-               msk->wnd_end = new_wnd_end;
+               WRITE_ONCE(msk->wnd_end, new_wnd_end);
 
        /* this assumes mptcp_incoming_options() is invoked after tcp_ack() */
-       if (after64(msk->wnd_end, READ_ONCE(msk->snd_nxt)))
+       if (after64(msk->wnd_end, snd_nxt))
                __mptcp_check_push(sk, ssk);
 
        if (after64(new_snd_una, old_snd_una)) {
@@ -1072,7 +1072,7 @@ static void ack_update_msk(struct mptcp_sock *msk,
 
        trace_ack_update_msk(mp_opt->data_ack,
                             old_snd_una, new_snd_una,
-                            new_wnd_end, msk->wnd_end);
+                            new_wnd_end, READ_ONCE(msk->wnd_end));
 }
 
 bool mptcp_update_rcv_data_fin(struct mptcp_sock *msk, u64 data_fin_seq, bool use_64bit)
@@ -1100,8 +1100,8 @@ static bool add_addr_hmac_valid(struct mptcp_sock *msk,
        if (mp_opt->echo)
                return true;
 
-       hmac = add_addr_generate_hmac(msk->remote_key,
-                                     msk->local_key,
+       hmac = add_addr_generate_hmac(READ_ONCE(msk->remote_key),
+                                     READ_ONCE(msk->local_key),
                                      &mp_opt->addr);
 
        pr_debug("msk=%p, ahmac=%llu, mp_opt->ahmac=%llu\n",
@@ -1148,7 +1148,7 @@ bool mptcp_incoming_options(struct sock *sk, struct sk_buff *skb)
 
        if (unlikely(mp_opt.suboptions != OPTION_MPTCP_DSS)) {
                if ((mp_opt.suboptions & OPTION_MPTCP_FASTCLOSE) &&
-                   msk->local_key == mp_opt.rcvr_key) {
+                   READ_ONCE(msk->local_key) == mp_opt.rcvr_key) {
                        WRITE_ONCE(msk->rcv_fastclose, true);
                        mptcp_schedule_work((struct sock *)msk);
                        MPTCP_INC_STATS(sock_net(sk), MPTCP_MIB_MPFASTCLOSERX);