ipv6: initialize inet socket cookies with sockcm_init
authorWillem de Bruijn <willemb@google.com>
Fri, 14 Feb 2025 22:27:04 +0000 (17:27 -0500)
committerJakub Kicinski <kuba@kernel.org>
Wed, 19 Feb 2025 02:27:20 +0000 (18:27 -0800)
Avoid open coding the same logic.

Signed-off-by: Willem de Bruijn <willemb@google.com>
Reviewed-by: David Ahern <dsahern@kernel.org>
Link: https://patch.msgid.link/20250214222720.3205500-8-willemdebruijn.kernel@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
include/net/ipv6.h
net/ipv6/ping.c
net/ipv6/raw.c
net/ipv6/udp.c

index 46a679d9b3348e1c2a3d67766533e327a9e8262b..9614006f483c9700168c9734f71440980c09017f 100644 (file)
@@ -371,6 +371,8 @@ static inline void ipcm6_init_sk(struct ipcm6_cookie *ipc6,
                .tclass = inet6_sk(sk)->tclass,
                .dontfrag = inet6_test_bit(DONTFRAG, sk),
        };
+
+       sockcm_init(&ipc6->sockc, sk);
 }
 
 static inline struct ipv6_txoptions *txopt_get(const struct ipv6_pinfo *np)
index 46b8adf6e7f8e2a37b23286515d2a91e1756e16a..84d90dd8b3f0f7cdf7dd3336c2d7b8e5fc1eefd5 100644 (file)
@@ -119,9 +119,6 @@ static int ping_v6_sendmsg(struct sock *sk, struct msghdr *msg, size_t len)
                return -EINVAL;
 
        ipcm6_init_sk(&ipc6, sk);
-       ipc6.sockc.priority = READ_ONCE(sk->sk_priority);
-       ipc6.sockc.tsflags = READ_ONCE(sk->sk_tsflags);
-       ipc6.sockc.mark = READ_ONCE(sk->sk_mark);
 
        fl6.flowi6_oif = oif;
 
index ae68d3f7dd32166e62ffce1b37faa28c28304b46..fda640ebd53f86185928cb6f4545be1cafad8698 100644 (file)
@@ -769,19 +769,16 @@ static int rawv6_sendmsg(struct sock *sk, struct msghdr *msg, size_t len)
 
        hdrincl = inet_test_bit(HDRINCL, sk);
 
+       ipcm6_init_sk(&ipc6, sk);
+
        /*
         *      Get and verify the address.
         */
        memset(&fl6, 0, sizeof(fl6));
 
-       fl6.flowi6_mark = READ_ONCE(sk->sk_mark);
+       fl6.flowi6_mark = ipc6.sockc.mark;
        fl6.flowi6_uid = sk->sk_uid;
 
-       ipcm6_init_sk(&ipc6, sk);
-       ipc6.sockc.tsflags = READ_ONCE(sk->sk_tsflags);
-       ipc6.sockc.mark = fl6.flowi6_mark;
-       ipc6.sockc.priority = READ_ONCE(sk->sk_priority);
-
        if (sin6) {
                if (addr_len < SIN6_LEN_RFC2133)
                        return -EINVAL;
index 7096b7e84c106b5db80f3e8fe30dd24a16a2ce61..3a0d6c5a8286b1685e8a1dec50365fe392ab9a87 100644 (file)
@@ -1496,9 +1496,6 @@ int udpv6_sendmsg(struct sock *sk, struct msghdr *msg, size_t len)
 
        ipcm6_init_sk(&ipc6, sk);
        ipc6.gso_size = READ_ONCE(up->gso_size);
-       ipc6.sockc.tsflags = READ_ONCE(sk->sk_tsflags);
-       ipc6.sockc.mark = READ_ONCE(sk->sk_mark);
-       ipc6.sockc.priority = READ_ONCE(sk->sk_priority);
 
        /* destination address check */
        if (sin6) {