]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
net: use indirect call helpers for sk->sk_prot->release_cb()
authorEric Dumazet <edumazet@google.com>
Wed, 13 Sep 2023 12:58:35 +0000 (12:58 +0000)
committerDavid S. Miller <davem@davemloft.net>
Sat, 16 Sep 2023 09:09:43 +0000 (10:09 +0100)
When adding sk->sk_prot->release_cb() call from __sk_flush_backlog()
Paolo suggested using indirect call helpers to take care of
CONFIG_RETPOLINE=y case.

It turns out Google had such mitigation for years in release_sock(),
it is time to make this public :)

Suggested-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/core/sock.c

index 213a62ac13f2ebe720ae2034400a9e8d70c15ee3..a5995750c5c542d33e8c8c36a701ee9a9e17783d 100644 (file)
@@ -3003,7 +3003,9 @@ void __sk_flush_backlog(struct sock *sk)
        __release_sock(sk);
 
        if (sk->sk_prot->release_cb)
-               sk->sk_prot->release_cb(sk);
+               INDIRECT_CALL_INET_1(sk->sk_prot->release_cb,
+                                    tcp_release_cb, sk);
+
        spin_unlock_bh(&sk->sk_lock.slock);
 }
 EXPORT_SYMBOL_GPL(__sk_flush_backlog);
@@ -3523,7 +3525,8 @@ void release_sock(struct sock *sk)
                __release_sock(sk);
 
        if (sk->sk_prot->release_cb)
-               sk->sk_prot->release_cb(sk);
+               INDIRECT_CALL_INET_1(sk->sk_prot->release_cb,
+                                    tcp_release_cb, sk);
 
        sock_release_ownership(sk);
        if (waitqueue_active(&sk->sk_lock.wq))