void ip_sock_set_pktinfo(struct sock *sk);
 void ip_sock_set_recverr(struct sock *sk);
 void ip_sock_set_tos(struct sock *sk, int val);
+void  __ip_sock_set_tos(struct sock *sk, int val);
 
 #endif /* _IP_H */
 
        return err;
 }
 
-void ip_sock_set_tos(struct sock *sk, int val)
+void __ip_sock_set_tos(struct sock *sk, int val)
 {
-       u8 old_tos = READ_ONCE(inet_sk(sk)->tos);
+       u8 old_tos = inet_sk(sk)->tos;
 
        if (sk->sk_type == SOCK_STREAM) {
                val &= ~INET_ECN_MASK;
                sk_dst_reset(sk);
        }
 }
+
+void ip_sock_set_tos(struct sock *sk, int val)
+{
+       lock_sock(sk);
+       __ip_sock_set_tos(sk, val);
+       release_sock(sk);
+}
 EXPORT_SYMBOL(ip_sock_set_tos);
 
 void ip_sock_set_freebind(struct sock *sk)
 
        mptcp_for_each_subflow(msk, subflow) {
                struct sock *ssk = mptcp_subflow_tcp_sock(subflow);
 
-               ip_sock_set_tos(ssk, val);
+               __ip_sock_set_tos(ssk, val);
        }
        release_sock(sk);
 
        ssk->sk_bound_dev_if = sk->sk_bound_dev_if;
        ssk->sk_incoming_cpu = sk->sk_incoming_cpu;
        ssk->sk_ipv6only = sk->sk_ipv6only;
-       ip_sock_set_tos(ssk, inet_sk(sk)->tos);
+       __ip_sock_set_tos(ssk, inet_sk(sk)->tos);
 
        if (sk->sk_userlocks & tx_rx_locks) {
                ssk->sk_userlocks |= sk->sk_userlocks & tx_rx_locks;
 
        # the required infrastructure in MPTCP sockopt code. To support TOS, the
        # following function has been exported (T). Not great but better than
        # checking for a specific kernel version.
-       if ! mptcp_lib_kallsyms_has "T ip_sock_set_tos$"; then
+       if ! mptcp_lib_kallsyms_has "T __ip_sock_set_tos$"; then
                echo "INFO: ${msg} not supported by the kernel: SKIP"
                mptcp_lib_result_skip "${TEST_GROUP}"
                return