Takashi Iwai 97ce5c
From b7bf97fc562156edb774e31bf2906bfdc83b2717 Mon Sep 17 00:00:00 2001
Takashi Iwai 97ce5c
From: Jakub Kicinski <kuba@kernel.org>
Takashi Iwai 97ce5c
Date: Fri, 29 Oct 2021 08:51:34 -0700
Takashi Iwai 97ce5c
Subject: [PATCH] udp6: allow SO_MARK ctrl msg to affect routing
Takashi Iwai 97ce5c
Git-commit: 42dcfd850e514b229d616a53dec06d0f2533217c
Takashi Iwai 97ce5c
Patch-mainline: v5.16-rc1
Takashi Iwai 97ce5c
References: stable-5.14.19
Takashi Iwai 97ce5c
Takashi Iwai 97ce5c
[ Upstream commit 42dcfd850e514b229d616a53dec06d0f2533217c ]
Takashi Iwai 97ce5c
Takashi Iwai 97ce5c
Commit c6af0c227a22 ("ip: support SO_MARK cmsg")
Takashi Iwai 97ce5c
added propagation of SO_MARK from cmsg to skb->mark.
Takashi Iwai 97ce5c
For IPv4 and raw sockets the mark also affects route
Takashi Iwai 97ce5c
lookup, but in case of IPv6 the flow info is
Takashi Iwai 97ce5c
initialized before cmsg is parsed.
Takashi Iwai 97ce5c
Takashi Iwai 97ce5c
Fixes: c6af0c227a22 ("ip: support SO_MARK cmsg")
Takashi Iwai 97ce5c
Reported-and-tested-by: Xintong Hu <huxintong@fb.com>
Takashi Iwai 97ce5c
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Takashi Iwai 97ce5c
Reviewed-by: David Ahern <dsahern@kernel.org>
Takashi Iwai 97ce5c
Reviewed-by: Willem de Bruijn <willemb@google.com>
Takashi Iwai 97ce5c
Signed-off-by: David S. Miller <davem@davemloft.net>
Takashi Iwai 97ce5c
Signed-off-by: Sasha Levin <sashal@kernel.org>
Takashi Iwai 97ce5c
Acked-by: Takashi Iwai <tiwai@suse.de>
Takashi Iwai 97ce5c
Takashi Iwai 97ce5c
---
Takashi Iwai 97ce5c
 net/ipv6/udp.c | 2 +-
Takashi Iwai 97ce5c
 1 file changed, 1 insertion(+), 1 deletion(-)
Takashi Iwai 97ce5c
Takashi Iwai 97ce5c
diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c
Takashi Iwai 97ce5c
index ba77955d75fb..6a990afc2eee 100644
Takashi Iwai 97ce5c
--- a/net/ipv6/udp.c
Takashi Iwai 97ce5c
+++ b/net/ipv6/udp.c
Takashi Iwai 97ce5c
@@ -1435,7 +1435,6 @@ int udpv6_sendmsg(struct sock *sk, struct msghdr *msg, size_t len)
Takashi Iwai 97ce5c
 	if (!fl6.flowi6_oif)
Takashi Iwai 97ce5c
 		fl6.flowi6_oif = np->sticky_pktinfo.ipi6_ifindex;
Takashi Iwai 97ce5c
 
Takashi Iwai 97ce5c
-	fl6.flowi6_mark = ipc6.sockc.mark;
Takashi Iwai 97ce5c
 	fl6.flowi6_uid = sk->sk_uid;
Takashi Iwai 97ce5c
 
Takashi Iwai 97ce5c
 	if (msg->msg_controllen) {
Takashi Iwai 97ce5c
@@ -1471,6 +1470,7 @@ int udpv6_sendmsg(struct sock *sk, struct msghdr *msg, size_t len)
Takashi Iwai 97ce5c
 	ipc6.opt = opt;
Takashi Iwai 97ce5c
 
Takashi Iwai 97ce5c
 	fl6.flowi6_proto = sk->sk_protocol;
Takashi Iwai 97ce5c
+	fl6.flowi6_mark = ipc6.sockc.mark;
Takashi Iwai 97ce5c
 	fl6.daddr = *daddr;
Takashi Iwai 97ce5c
 	if (ipv6_addr_any(&fl6.saddr) && !ipv6_addr_any(&np->saddr))
Takashi Iwai 97ce5c
 		fl6.saddr = np->saddr;
Takashi Iwai 97ce5c
-- 
Takashi Iwai 97ce5c
2.26.2
Takashi Iwai 97ce5c