]> www.infradead.org Git - users/hch/misc.git/commitdiff
psp: fix preemptive inet_twsk() cast in psp_sk_get_assoc_rcu()
authorDaniel Zahka <daniel.zahka@gmail.com>
Thu, 18 Sep 2025 15:52:03 +0000 (08:52 -0700)
committerJakub Kicinski <kuba@kernel.org>
Sat, 20 Sep 2025 00:01:20 +0000 (17:01 -0700)
It is weird to cast to a timewait_sock before checking sk_state, even
if the use is after such a check. Remove the tw local variable, and
use inet_twsk() directly in the timewait branch.

Signed-off-by: Daniel Zahka <daniel.zahka@gmail.com>
Link: https://patch.msgid.link/20250918155205.2197603-3-daniel.zahka@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
include/net/psp/functions.h

index fb3cbe8427ea502eddc9569bf3a7f17d637e2d32..980de7e58f8aed2dab9964a3de2e4fa6e970e870 100644 (file)
@@ -126,7 +126,6 @@ psp_twsk_rx_policy_check(struct inet_timewait_sock *tw, struct sk_buff *skb)
 
 static inline struct psp_assoc *psp_sk_get_assoc_rcu(const struct sock *sk)
 {
-       struct inet_timewait_sock *tw;
        struct psp_assoc *pas;
        int state;
 
@@ -134,9 +133,9 @@ static inline struct psp_assoc *psp_sk_get_assoc_rcu(const struct sock *sk)
        if (!sk_is_inet(sk) || state & TCPF_NEW_SYN_RECV)
                return NULL;
 
-       tw = inet_twsk(sk);
-       pas = state & TCPF_TIME_WAIT ? rcu_dereference(tw->psp_assoc) :
-                                      rcu_dereference(sk->psp_assoc);
+       pas = state & TCPF_TIME_WAIT ?
+                     rcu_dereference(inet_twsk(sk)->psp_assoc) :
+                     rcu_dereference(sk->psp_assoc);
        return pas;
 }