From: Greg Kroah-Hartman Date: Tue, 10 Oct 2023 19:13:31 +0000 (+0200) Subject: 6.1-stable patches X-Git-Tag: v4.14.327~9 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=af13e22e6d43cfdf99a9b8ba54b296fb0935fb30;p=thirdparty%2Fkernel%2Fstable-queue.git 6.1-stable patches added patches: ipv6-remove-one-read_lock-read_unlock-pair-in-rt6_check_neigh.patch --- diff --git a/queue-6.1/ipv6-remove-one-read_lock-read_unlock-pair-in-rt6_check_neigh.patch b/queue-6.1/ipv6-remove-one-read_lock-read_unlock-pair-in-rt6_check_neigh.patch new file mode 100644 index 00000000000..896f42dd145 --- /dev/null +++ b/queue-6.1/ipv6-remove-one-read_lock-read_unlock-pair-in-rt6_check_neigh.patch @@ -0,0 +1,45 @@ +From c486640aa710ddd06c13a7f7162126e1552e8842 Mon Sep 17 00:00:00 2001 +From: Eric Dumazet +Date: Mon, 13 Mar 2023 20:17:32 +0000 +Subject: ipv6: remove one read_lock()/read_unlock() pair in rt6_check_neigh() + +From: Eric Dumazet + +commit c486640aa710ddd06c13a7f7162126e1552e8842 upstream. + +rt6_check_neigh() uses read_lock() to protect n->nud_state reading. + +This seems overkill and causes false sharing. + +Signed-off-by: Eric Dumazet +Reviewed-by: David Ahern +Reviewed-by: Martin KaFai Lau +Signed-off-by: Jakub Kicinski +Signed-off-by: Greg Kroah-Hartman +--- + net/ipv6/route.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +--- a/net/ipv6/route.c ++++ b/net/ipv6/route.c +@@ -690,16 +690,16 @@ static enum rt6_nud_state rt6_check_neig + neigh = __ipv6_neigh_lookup_noref(fib6_nh->fib_nh_dev, + &fib6_nh->fib_nh_gw6); + if (neigh) { +- read_lock(&neigh->lock); +- if (neigh->nud_state & NUD_VALID) ++ u8 nud_state = READ_ONCE(neigh->nud_state); ++ ++ if (nud_state & NUD_VALID) + ret = RT6_NUD_SUCCEED; + #ifdef CONFIG_IPV6_ROUTER_PREF +- else if (!(neigh->nud_state & NUD_FAILED)) ++ else if (!(nud_state & NUD_FAILED)) + ret = RT6_NUD_SUCCEED; + else + ret = RT6_NUD_FAIL_PROBE; + #endif +- read_unlock(&neigh->lock); + } else { + ret = IS_ENABLED(CONFIG_IPV6_ROUTER_PREF) ? + RT6_NUD_SUCCEED : RT6_NUD_FAIL_DO_RR; diff --git a/queue-6.1/series b/queue-6.1/series index bd999669dae..4b90a016fac 100644 --- a/queue-6.1/series +++ b/queue-6.1/series @@ -152,3 +152,4 @@ btrfs-fix-an-error-handling-path-in-btrfs_rename.patch btrfs-fix-fscrypt-name-leak-after-failure-to-join-log-transaction.patch netlink-remove-the-flex-array-from-struct-nlmsghdr.patch btrfs-file_remove_privs-needs-an-exclusive-lock-in-direct-io-write.patch +ipv6-remove-one-read_lock-read_unlock-pair-in-rt6_check_neigh.patch