Received: by 2002:a25:824b:0:0:0:0:0 with SMTP id d11csp1723960ybn; Thu, 26 Sep 2019 00:57:15 -0700 (PDT) X-Google-Smtp-Source: APXvYqzF0YbMRbNHI3uZUVs0dHvlalrW9+F2JEl/3DAt/fNusYVXJACYCU5fEEA6hdc1uWocBvfp X-Received: by 2002:a50:d949:: with SMTP id u9mr2138417edj.142.1569484635263; Thu, 26 Sep 2019 00:57:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1569484635; cv=none; d=google.com; s=arc-20160816; b=Smwvm64WzUrvoV8noehIrEwzjsY36+XhyYvI9v2crsvMnysIe5asrnAI2U9fu4DBKC gElw7YoPmmPre2017YvnsQseJFPItr+8hxJ64H2/bhaf4WhqnaAybe/ILcuOxBDuzBJ9 hVwKFPMrE++6hR1gk3+aLlSiGufItrm4jo+Q1c1RVU4aLajwgRe58Cfe62AlV0mzugoo W9OM+itFQnlw635aNXWM7UhT51IRbhKjdtPcC4CMccmA76HUGwcw9k29DnnTf64SK96B artfR2QOjClbpr41HMdjwpnkdN37YwV/hSEfUxeT8PMNmIY+M97nv8cboSFCDoeT5+g0 nemg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=+YhYy9Ib/ytTmfhmu93bMTv4oPejXKDp0bG0F+naB4A=; b=W//T9leaXBtj5Nmqo+uktiStz4v0NtUP3odQTkqni6BvybSowB3jjB8g8F5UgdSKra SdvbR24GWCA6GFxmSSEod6xGelapeX8GsZDKdLZ7Ae4fiSyNmByrNMmu+xYTZ/vcC52l pYBjKxx2LjgyyC24IfVWHAxca1hqzc977esTFkRPJLfrpsxDMDkt0j6klN99JD0tktBj dapqr6Z9nnMyV4aBtW8919tvXNVhNrJekkOA06YpGI10NV17I7TooLg3or1vFS6bu7nw X3nKxUEsP8cRoYgl9MX4BOcTuVRoXqlDrt7DaQc/Ci1ByMc7YlEVG63zc3qYO1TYAgqk 9wDA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@zx2c4.com header.s=mail header.b="0K6Ytrl/"; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=zx2c4.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id o32si937215edb.63.2019.09.26.00.56.52; Thu, 26 Sep 2019 00:57:15 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@zx2c4.com header.s=mail header.b="0K6Ytrl/"; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=zx2c4.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2502692AbfIXHgZ (ORCPT + 99 others); Tue, 24 Sep 2019 03:36:25 -0400 Received: from frisell.zx2c4.com ([192.95.5.64]:43049 "EHLO frisell.zx2c4.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388489AbfIXHgZ (ORCPT ); Tue, 24 Sep 2019 03:36:25 -0400 Received: by frisell.zx2c4.com (ZX2C4 Mail Server) with ESMTP id 6c2e1b8c; Tue, 24 Sep 2019 06:50:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=zx2c4.com; h=from:to:cc :subject:date:message-id:mime-version:content-transfer-encoding; s=mail; bh=sxkr1GjA+CsTQ6F9imEHmeQRp90=; b=0K6Ytrl/QEsiaO1QZr6s +K7CfH2DPbhur/Qy3RFbGxcJzXNW2ugJbMgIhVnUMpZxVpzTgMqxE3lXYyHe30ZL 4KbwsIEZthGw9zi+qowGGpxDkB2XsaictHzT8vnq1txFDdUHf/nT9QKr7V8L3xJW O9QCKE00gkivk1hykqNT3obEgyeLL4YtLg+YM4RZGecvyPQIpGVIlidG2eDQgj9a kWUEtrBG8ArIyDxwZBFv6orgP5PWAS+RoENJWt677BNh4I39wIxYmKceGrBgBaqQ HdUvSDMxb3jWLCaKfXbf67t61bGhEOLbuOA2uMXD9SBrIaNFsXS9Ua6vnLMMjfne Zw== Received: by frisell.zx2c4.com (ZX2C4 Mail Server) with ESMTPSA id 6493f950 (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256:NO); Tue, 24 Sep 2019 06:50:47 +0000 (UTC) From: "Jason A. Donenfeld" To: netdev@vger.kernel.org, linux-kernel@vger.kernel.org Cc: "Jason A. Donenfeld" , stable@vger.kernel.org Subject: [PATCH] ipv6: do not free rt if FIB_LOOKUP_NOREF is set on suppress rule Date: Tue, 24 Sep 2019 09:36:15 +0200 Message-Id: <20190924073615.31704-1-Jason@zx2c4.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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 --- 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