From de783628d1bc62666cedd49a9fb1cd55fd6f33c7 Mon Sep 17 00:00:00 2001 From: Laura Abbott Date: Sep 21 2017 19:57:16 +0000 Subject: Fix useaddr regression (rhbz 1432684) --- diff --git a/1-3-net-set-tb--fast_sk_family.patch b/1-3-net-set-tb--fast_sk_family.patch new file mode 100644 index 0000000..dbe5250 --- /dev/null +++ b/1-3-net-set-tb--fast_sk_family.patch @@ -0,0 +1,50 @@ +From patchwork Mon Sep 18 16:28:55 2017 +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +Subject: [1/3] net: set tb->fast_sk_family +X-Patchwork-Submitter: Josef Bacik +X-Patchwork-Id: 815031 +X-Patchwork-Delegate: davem@davemloft.net +Message-Id: <1505752137-15522-2-git-send-email-jbacik@fb.com> +To: davem@davemloft.net, netdev@vger.kernel.org, + linux-kernel@vger.kernel.org, crobinso@redhat.com, + labbott@redhat.com, kernel-team@fb.com +Cc: Josef Bacik , stable@vger.kernel.org +Date: Mon, 18 Sep 2017 12:28:55 -0400 +From: josef@toxicpanda.com +List-Id: + +From: Josef Bacik + +We need to set the tb->fast_sk_family properly so we can use the proper +comparison function for all subsequent reuseport bind requests. + +Cc: stable@vger.kernel.org +Fixes: 637bc8bbe6c0 ("inet: reset tb->fastreuseport when adding a reuseport sk") +Reported-and-tested-by: Cole Robinson +Signed-off-by: Josef Bacik +--- + net/ipv4/inet_connection_sock.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/net/ipv4/inet_connection_sock.c b/net/ipv4/inet_connection_sock.c +index b9c64b40a83a..f87f4805e244 100644 +--- a/net/ipv4/inet_connection_sock.c ++++ b/net/ipv4/inet_connection_sock.c +@@ -328,6 +328,7 @@ int inet_csk_get_port(struct sock *sk, unsigned short snum) + tb->fastuid = uid; + tb->fast_rcv_saddr = sk->sk_rcv_saddr; + tb->fast_ipv6_only = ipv6_only_sock(sk); ++ tb->fast_sk_family = sk->sk_family; + #if IS_ENABLED(CONFIG_IPV6) + tb->fast_v6_rcv_saddr = sk->sk_v6_rcv_saddr; + #endif +@@ -354,6 +355,7 @@ int inet_csk_get_port(struct sock *sk, unsigned short snum) + tb->fastuid = uid; + tb->fast_rcv_saddr = sk->sk_rcv_saddr; + tb->fast_ipv6_only = ipv6_only_sock(sk); ++ tb->fast_sk_family = sk->sk_family; + #if IS_ENABLED(CONFIG_IPV6) + tb->fast_v6_rcv_saddr = sk->sk_v6_rcv_saddr; + #endif diff --git a/2-3-net-use-inet6_rcv_saddr-to-compare-sockets.patch b/2-3-net-use-inet6_rcv_saddr-to-compare-sockets.patch new file mode 100644 index 0000000..3d64361 --- /dev/null +++ b/2-3-net-use-inet6_rcv_saddr-to-compare-sockets.patch @@ -0,0 +1,44 @@ +From patchwork Mon Sep 18 16:28:56 2017 +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +Subject: [2/3] net: use inet6_rcv_saddr to compare sockets +X-Patchwork-Submitter: Josef Bacik +X-Patchwork-Id: 815028 +X-Patchwork-Delegate: davem@davemloft.net +Message-Id: <1505752137-15522-3-git-send-email-jbacik@fb.com> +To: davem@davemloft.net, netdev@vger.kernel.org, + linux-kernel@vger.kernel.org, crobinso@redhat.com, + labbott@redhat.com, kernel-team@fb.com +Cc: Josef Bacik , stable@vger.kernel.org +Date: Mon, 18 Sep 2017 12:28:56 -0400 +From: josef@toxicpanda.com +List-Id: + +From: Josef Bacik + +In ipv6_rcv_saddr_equal() we need to use inet6_rcv_saddr(sk) for the +ipv6 compare with the fast socket information to make sure we're doing +the proper comparisons. + +Cc: stable@vger.kernel.org +Fixes: 637bc8bbe6c0 ("inet: reset tb->fastreuseport when adding a reuseport sk") +Reported-and-tested-by: Cole Robinson +Signed-off-by: Josef Bacik +--- + net/ipv4/inet_connection_sock.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/net/ipv4/inet_connection_sock.c b/net/ipv4/inet_connection_sock.c +index f87f4805e244..a1bf30438bc5 100644 +--- a/net/ipv4/inet_connection_sock.c ++++ b/net/ipv4/inet_connection_sock.c +@@ -266,7 +266,7 @@ static inline int sk_reuseport_match(struct inet_bind_bucket *tb, + #if IS_ENABLED(CONFIG_IPV6) + if (tb->fast_sk_family == AF_INET6) + return ipv6_rcv_saddr_equal(&tb->fast_v6_rcv_saddr, +- &sk->sk_v6_rcv_saddr, ++ inet6_rcv_saddr(sk), + tb->fast_rcv_saddr, + sk->sk_rcv_saddr, + tb->fast_ipv6_only, diff --git a/3-3-inet-fix-improper-empty-comparison.patch b/3-3-inet-fix-improper-empty-comparison.patch new file mode 100644 index 0000000..421a235 --- /dev/null +++ b/3-3-inet-fix-improper-empty-comparison.patch @@ -0,0 +1,53 @@ +From patchwork Mon Sep 18 16:28:57 2017 +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +Subject: [3/3] inet: fix improper empty comparison +X-Patchwork-Submitter: Josef Bacik +X-Patchwork-Id: 815029 +X-Patchwork-Delegate: davem@davemloft.net +Message-Id: <1505752137-15522-4-git-send-email-jbacik@fb.com> +To: davem@davemloft.net, netdev@vger.kernel.org, + linux-kernel@vger.kernel.org, crobinso@redhat.com, + labbott@redhat.com, kernel-team@fb.com +Cc: Josef Bacik , stable@vger.kernel.org +Date: Mon, 18 Sep 2017 12:28:57 -0400 +From: josef@toxicpanda.com +List-Id: + +From: Josef Bacik + +When doing my reuseport rework I screwed up and changed a + +if (hlist_empty(&tb->owners)) + +to + +if (!hlist_empty(&tb->owners)) + +This is obviously bad as all of the reuseport/reuse logic was reversed, +which caused weird problems like allowing an ipv4 bind conflict if we +opened an ipv4 only socket on a port followed by an ipv6 only socket on +the same port. + +Cc: stable@vger.kernel.org +Fixes: b9470c27607b ("inet: kill smallest_size and smallest_port") +Reported-by: Cole Robinson +Signed-off-by: Josef Bacik +--- + net/ipv4/inet_connection_sock.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/net/ipv4/inet_connection_sock.c b/net/ipv4/inet_connection_sock.c +index a1bf30438bc5..c039c937ba90 100644 +--- a/net/ipv4/inet_connection_sock.c ++++ b/net/ipv4/inet_connection_sock.c +@@ -321,7 +321,7 @@ int inet_csk_get_port(struct sock *sk, unsigned short snum) + goto fail_unlock; + } + success: +- if (!hlist_empty(&tb->owners)) { ++ if (hlist_empty(&tb->owners)) { + tb->fastreuse = reuse; + if (sk->sk_reuseport) { + tb->fastreuseport = FASTREUSEPORT_ANY; diff --git a/kernel.spec b/kernel.spec index 3882d79..a13a868 100644 --- a/kernel.spec +++ b/kernel.spec @@ -671,6 +671,11 @@ Patch624: input-rmi4-remove-the-need-for-artifical-IRQ.patch # rhbz 1493435 1493436 Patch625: KEYS-prevent-KEYCTL_READ-on-negative-key.patch +# rhbz 1432684 +Patch626: 1-3-net-set-tb--fast_sk_family.patch +Patch627: 2-3-net-use-inet6_rcv_saddr-to-compare-sockets.patch +Patch628: 3-3-inet-fix-improper-empty-comparison.patch + # END OF PATCH DEFINITIONS %endif @@ -2225,6 +2230,9 @@ fi # # %changelog +* Thu Sep 21 2017 Laura Abbott +- Fix useaddr regression (rhbz 1432684) + * Wed Sep 20 2017 Laura Abbott - Disable CONFIG_VIRTIO_BLK_SCSI