Message ID | 20230727174629.55740-1-sj@kernel.org |
---|---|
State | New |
Headers |
Return-Path: <linux-kernel-owner@vger.kernel.org> Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:a985:0:b0:3e4:2afc:c1 with SMTP id t5csp1277231vqo; Thu, 27 Jul 2023 11:10:38 -0700 (PDT) X-Google-Smtp-Source: APBJJlG7P10canZR99vBL5fMm32gS43CEBKm95Nqhc9+M29Miqr03KhX5WUr4RUahrcmCfbmzsjH X-Received: by 2002:a17:902:d483:b0:1bb:91f2:bb32 with SMTP id c3-20020a170902d48300b001bb91f2bb32mr93025plg.39.1690481438194; Thu, 27 Jul 2023 11:10:38 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690481438; cv=none; d=google.com; s=arc-20160816; b=gjwh0X9Gx2ElxBa9o4+B7tYuHeP3UyQx8QPBgPHjIkdgJXCWTKoZ2fv81RQ/KgatGO CFCAvEx4pTKhATxl6uckdP3DQfX9nQQ9xR0X3PHWXTEyyypGYVCdbCg781/Oi7nWEy+s FcI3/N/IECrwukEZFHYZ9el6borvg9imuNU5T46LyHzNjpA9BGgV17CsiQSA8Xv4TcSI YuD2+X9X1vqkToLWTltOOxCjdTRZVkzEf3Q7aeh0iiCqNMNRPDCzRKNIwpT8GW6ugH8D 3CuiyRWITCL/EbCkYFfZPW7TFrZ34vOzcWRwmI52aPuDCXoNKknU+COpnKaNp+UVDsNB uWNw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=WocINYTUT0stqnWJsSuA7xSBuhrCp5k5W61G3AplV/0=; fh=fehxmcoCOz+tCBq1OG5vCiT0wukH1TYPv9ixqO+IhE8=; b=cp26b8mPslIPOdKwUhW68+95pWKq/AmHjz104p/r5kB97aguI1kdiZDXS27XhK1Xiv +qCOEYUXlV7kEHiQR2w39h8N63dMnLXPgxfkyDRIlDSR9rB/EXbDjDrZrylpS0duUdyA ovkEWcbEYkx2SssCaAwD1Nut30tKbkpr2kjm6tuTAxlTooprgpNOsSKwmrv/x+3gt/m7 N25NPnWMUNedhLr2yhNKOce8COud8Y0P8mdR+3ZinO/fLZ2kYZx/k4xj21DAeWyoNCPV bcwf+ougdBx1qgSw/gvjG12HBz0rpLX2TK2eJOGOzs7V2ITIEwP7qshBpyIftb5uEtbI rgjQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=MvW3RuPC; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id h2-20020a170902748200b001b9eb349550si1605320pll.391.2023.07.27.11.10.23; Thu, 27 Jul 2023 11:10:38 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=MvW3RuPC; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231397AbjG0RrW (ORCPT <rfc822;kloczko.tomasz@gmail.com> + 99 others); Thu, 27 Jul 2023 13:47:22 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40812 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229547AbjG0RrV (ORCPT <rfc822;linux-kernel@vger.kernel.org>); Thu, 27 Jul 2023 13:47:21 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [IPv6:2604:1380:4641:c500::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0BC0230E8; Thu, 27 Jul 2023 10:47:21 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 93D4C61F12; Thu, 27 Jul 2023 17:47:20 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 237CCC433C7; Thu, 27 Jul 2023 17:47:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1690480040; bh=QfaodoqmhOaqVb7r9DJuHMcMwJQYPs4wOqOC0JVyr0k=; h=From:To:Cc:Subject:Date:From; b=MvW3RuPCZ/4dSoKiUmYb11DUaNNa07/NIWH1PeKw/LetAbx1oysjUrNBE64fFDL3d a1z0Z4umsyOz95ktHIveSWhNRHjMR3PyKDHl+Bkp/EX9i5KlutIy9FwVXneiaWZ+LN 633DK6235IIchcG3EFpjCbSYX10Q5sL0eILuUyUD9miJQiFkZW6lDGM1G5k52YY3sk 91Z5PJW0DS56CM+xbZgJXkjfTFnBbyymltrD45RZaOGyjixyrNRRYebrXDwnzFVddN xDFNN1Rnk0BdzRjhIxMiLw5LYIPmEzFnUE2pglwC3vNzEDUixpKzSiGAHzyGUJLRix WBv/HjZydJn/A== From: SeongJae Park <sj@kernel.org> To: stable@vger.kernel.org Cc: M A Ramdhan <ramdhan@starlabs.sg>, gregkh@linuxfoundation.org, sashal@kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, hailmo@amazon.com, Jamal Hadi Salim <jhs@mojatatu.com>, Pedro Tammela <pctammela@mojatatu.com>, Jakub Kicinski <kuba@kernel.org>, SeongJae Park <sj@kernel.org> Subject: [PATCH 4.19] net/sched: cls_fw: Fix improper refcount update leads to use-after-free Date: Thu, 27 Jul 2023 17:46:28 +0000 Message-Id: <20230727174629.55740-1-sj@kernel.org> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF, RCVD_IN_DNSWL_BLOCKED,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: <linux-kernel.vger.kernel.org> X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1772598016133881462 X-GMAIL-MSGID: 1772598264442650956 |
Series |
[4.19] net/sched: cls_fw: Fix improper refcount update leads to use-after-free
|
|
Commit Message
SeongJae Park
July 27, 2023, 5:46 p.m. UTC
From: M A Ramdhan <ramdhan@starlabs.sg> [ Upstream commit 0323bce598eea038714f941ce2b22541c46d488f ] In the event of a failure in tcf_change_indev(), fw_set_parms() will immediately return an error after incrementing or decrementing reference counter in tcf_bind_filter(). If attacker can control reference counter to zero and make reference freed, leading to use after free. In order to prevent this, move the point of possible failure above the point where the TC_FW_CLASSID is handled. Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2") Reported-by: M A Ramdhan <ramdhan@starlabs.sg> Signed-off-by: M A Ramdhan <ramdhan@starlabs.sg> Acked-by: Jamal Hadi Salim <jhs@mojatatu.com> Reviewed-by: Pedro Tammela <pctammela@mojatatu.com> Message-ID: <20230705161530.52003-1-ramdhan@starlabs.sg> Signed-off-by: Jakub Kicinski <kuba@kernel.org> Signed-off-by: SeongJae Park <sj@kernel.org> --- net/sched/cls_fw.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-)
Comments
On Thu, Jul 27, 2023 at 05:46:28PM +0000, SeongJae Park wrote: > From: M A Ramdhan <ramdhan@starlabs.sg> > > [ Upstream commit 0323bce598eea038714f941ce2b22541c46d488f ] > > In the event of a failure in tcf_change_indev(), fw_set_parms() will > immediately return an error after incrementing or decrementing > reference counter in tcf_bind_filter(). If attacker can control > reference counter to zero and make reference freed, leading to > use after free. > > In order to prevent this, move the point of possible failure above the > point where the TC_FW_CLASSID is handled. > > Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2") > Reported-by: M A Ramdhan <ramdhan@starlabs.sg> > Signed-off-by: M A Ramdhan <ramdhan@starlabs.sg> > Acked-by: Jamal Hadi Salim <jhs@mojatatu.com> > Reviewed-by: Pedro Tammela <pctammela@mojatatu.com> > Message-ID: <20230705161530.52003-1-ramdhan@starlabs.sg> > Signed-off-by: Jakub Kicinski <kuba@kernel.org> > Signed-off-by: SeongJae Park <sj@kernel.org> > --- > net/sched/cls_fw.c | 10 +++++----- Both now queued up, thanks. greg k-h
diff --git a/net/sched/cls_fw.c b/net/sched/cls_fw.c index cb2c62605fc76..5284a473c697f 100644 --- a/net/sched/cls_fw.c +++ b/net/sched/cls_fw.c @@ -221,11 +221,6 @@ static int fw_set_parms(struct net *net, struct tcf_proto *tp, if (err < 0) return err; - if (tb[TCA_FW_CLASSID]) { - f->res.classid = nla_get_u32(tb[TCA_FW_CLASSID]); - tcf_bind_filter(tp, &f->res, base); - } - #ifdef CONFIG_NET_CLS_IND if (tb[TCA_FW_INDEV]) { int ret; @@ -244,6 +239,11 @@ static int fw_set_parms(struct net *net, struct tcf_proto *tp, } else if (head->mask != 0xFFFFFFFF) return err; + if (tb[TCA_FW_CLASSID]) { + f->res.classid = nla_get_u32(tb[TCA_FW_CLASSID]); + tcf_bind_filter(tp, &f->res, base); + } + return 0; }