]> www.infradead.org Git - users/hch/misc.git/commitdiff
psp: do not use sk_dst_get() in psp_dev_get_for_sock()
authorEric Dumazet <edumazet@google.com>
Thu, 18 Sep 2025 11:52:38 +0000 (11:52 +0000)
committerJakub Kicinski <kuba@kernel.org>
Fri, 19 Sep 2025 14:05:26 +0000 (07:05 -0700)
Use __sk_dst_get() and dst_dev_rcu(), because dst->dev could
be changed under us.

Fixes: 6b46ca260e22 ("net: psp: add socket security association code")
Signed-off-by: Eric Dumazet <edumazet@google.com>
Cc: Willem de Bruijn <willemb@google.com>
Tested-by: Daniel Zahka <daniel.zahka@gmail.com>
Reviewed-by: Daniel Zahka <daniel.zahka@gmail.com>
Reviewed-by: Kuniyuki Iwashima <kuniyu@google.com>
Link: https://patch.msgid.link/20250918115238.237475-1-edumazet@google.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/psp/psp_sock.c

index afa966c6b69dc657a54425656131b57645c81f6f..d19e37e939672c1f8fc0ebb62e50a3fb32cc8d25 100644 (file)
 
 struct psp_dev *psp_dev_get_for_sock(struct sock *sk)
 {
+       struct psp_dev *psd = NULL;
        struct dst_entry *dst;
-       struct psp_dev *psd;
-
-       dst = sk_dst_get(sk);
-       if (!dst)
-               return NULL;
 
        rcu_read_lock();
-       psd = rcu_dereference(dst->dev->psp_dev);
-       if (psd && !psp_dev_tryget(psd))
-               psd = NULL;
+       dst = __sk_dst_get(sk);
+       if (dst) {
+               psd = rcu_dereference(dst_dev_rcu(dst)->psp_dev);
+               if (psd && !psp_dev_tryget(psd))
+                       psd = NULL;
+       }
        rcu_read_unlock();
 
-       dst_release(dst);
-
        return psd;
 }