• Jakub Sitnicki's avatar
    net/tls: Annotate access to sk_prot with READ_ONCE/WRITE_ONCE · d5bee737
    Jakub Sitnicki authored
    sockmap performs lockless writes to sk->sk_prot on the following paths:
    
    tcp_bpf_{recvmsg|sendmsg} / sock_map_unref
      sk_psock_put
        sk_psock_drop
          sk_psock_restore_proto
            WRITE_ONCE(sk->sk_prot, proto)
    
    To prevent load/store tearing [1], and to make tooling aware of intentional
    shared access [2], we need to annotate other sites that access sk_prot with
    READ_ONCE/WRITE_ONCE macros.
    
    Change done with Coccinelle with following semantic patch:
    
    @@
    expression E;
    identifier I;
    struct sock *sk;
    identifier sk_prot =~ "^sk_prot$";
    @@
    (
     E =
    -sk->sk_prot
    +READ_ONCE(sk->sk_prot)
    |
    -sk->sk_prot = E
    +WRITE_ONCE(sk->sk_prot, E)
    |
    -sk->sk_prot
    +READ_ONCE(sk->sk_prot)
     ->I
    )
    Signed-off-by: default avatarJakub Sitnicki <jakub@cloudflare.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    d5bee737
tls_main.c 20.9 KB