netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] ipv6: do not free rt if FIB_LOOKUP_NOREF is set on suppress rule
@ 2019-09-24  7:36 Jason A. Donenfeld
  2019-09-24  9:35 ` Jason A. Donenfeld
  2019-09-24 12:52 ` David Miller
  0 siblings, 2 replies; 10+ messages in thread
From: Jason A. Donenfeld @ 2019-09-24  7:36 UTC (permalink / raw)
  To: netdev, linux-kernel; +Cc: Jason A. Donenfeld, stable

Commit 7d9e5f422150 removed references from certain dsts, but accounting
for this never translated down into the fib6 suppression code. This bug
was triggered by WireGuard users who use wg-quick(8), which uses the
"suppress-prefix" directive to ip-rule(8) for routing all of their
internet traffic without routing loops. The test case in the link of
this commit reliably triggers various crashes due to the use-after-free
caused by the reference underflow.

Cc: stable@vger.kernel.org
Fixes: 7d9e5f422150 ("ipv6: convert major tx path to use RT6_LOOKUP_F_DST_NOREF")
Test-case: https://git.zx2c4.com/WireGuard/commit/?id=ad66532000f7a20b149e47c5eb3a957362c8e161
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
---
 net/ipv6/fib6_rules.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/net/ipv6/fib6_rules.c b/net/ipv6/fib6_rules.c
index d22b6c140f23..f9e8fe3ff0c5 100644
--- a/net/ipv6/fib6_rules.c
+++ b/net/ipv6/fib6_rules.c
@@ -287,7 +287,8 @@ static bool fib6_rule_suppress(struct fib_rule *rule, struct fib_lookup_arg *arg
 	return false;
 
 suppress_route:
-	ip6_rt_put(rt);
+	if (!(arg->flags & FIB_LOOKUP_NOREF))
+		ip6_rt_put(rt);
 	return true;
 }
 
-- 
2.21.0


^ permalink raw reply related	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2019-09-26 14:43 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-09-24  7:36 [PATCH] ipv6: do not free rt if FIB_LOOKUP_NOREF is set on suppress rule Jason A. Donenfeld
2019-09-24  9:35 ` Jason A. Donenfeld
2019-09-24 12:52 ` David Miller
2019-09-24 12:55   ` Jason A. Donenfeld
2019-09-24 13:30     ` David Miller
2019-09-24 13:49       ` Jason A. Donenfeld
2019-09-24 14:01   ` [PATCH v2] " Jason A. Donenfeld
2019-09-24 17:02     ` Wei Wang
2019-09-26  7:35     ` David Miller
2019-09-26 14:43     ` David Ahern

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).