Received: by 2002:a5d:9c59:0:0:0:0:0 with SMTP id 25csp2206474iof; Tue, 7 Jun 2022 23:11:42 -0700 (PDT) X-Google-Smtp-Source: ABdhPJz9w3iMAuu7wdcovRpYmIXe/+hc3yHr/HoA/z7PY6rke/yyu4TrWYZhaHBi5sV/bdXn/CGM X-Received: by 2002:a63:2a0d:0:b0:3ab:392c:f45c with SMTP id q13-20020a632a0d000000b003ab392cf45cmr28914731pgq.575.1654668701992; Tue, 07 Jun 2022 23:11:41 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1654668701; cv=none; d=google.com; s=arc-20160816; b=r9nAYy7zRR8BNwMfP5eMoNKFkbhrcq37qE16zywTdIbI62oG2jObGMDYTOx0TdoJ88 V4u77n+Pj9oTYNQHH5Vhff7Etz79K64EsvVwhXrN+S+tMHjRZktbpgfC8aaWQdu2Haj0 h21FEMiIMtaVLFSUGXDwaVhiFzZKEhpoLi4VuZ/C4wnTXglEIlCRKj9KBpvdub1KZp+f vbFg5qzMM8DBgNBD8W1z95sfOD2As6cNIvlGzj0cVg+j8mvJAU+yFUdf7gFa3LWz7En3 MW+FgPABDBGkcMVRsNTFmiH5Tiq3ramyHGI2y/EBG991K1xgRGmo/D6A+uKYTtJ7idP/ 931A== 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 :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=ndEuWUw+yagTTLtHDLP6XiSHeW0kDOF2rcZMW6avxiM=; b=cSCtiPR7+OVChPewoP4x3bogDLLL4M7TjjCfWzEsfG5kcpKoKDGbcPqT5QAsk9IdMT M4H6oDfMF1XDxpNiwWOgnEAXrNMQkEiPUctNAYGqX/Ys+dcZuq+Ysis1otEY0kZMnh9n 99tQqdbAPSJb2EbGBxhzU1uUVf5/aiIBrGniam7IwMC4wghH0W2QiIgH4893lwWjVObC kiX9ahbde/io0ZBZ8vdyp1KMgq6Hf1cTIaKqNL2CsajSJ3lOZqCWOZLbM5KTZwwIIEDH RCm77aELvjYH3E/zWKs8te/BSflMAUzw9rJExO1L5/cfPb2kP5VnS7EGA27wKl6tSPmJ X++w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=XUDucJMh; spf=softfail (google.com: domain of transitioning linux-kernel-owner@vger.kernel.org does not designate 23.128.96.19 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net. [23.128.96.19]) by mx.google.com with ESMTPS id d68-20020a636847000000b003fdb97d8757si11604383pgc.378.2022.06.07.23.11.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jun 2022 23:11:41 -0700 (PDT) Received-SPF: softfail (google.com: domain of transitioning linux-kernel-owner@vger.kernel.org does not designate 23.128.96.19 as permitted sender) client-ip=23.128.96.19; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=XUDucJMh; spf=softfail (google.com: domain of transitioning linux-kernel-owner@vger.kernel.org does not designate 23.128.96.19 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id C12BC4391AC; Tue, 7 Jun 2022 22:33:46 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1389886AbiFHBqc (ORCPT + 99 others); Tue, 7 Jun 2022 21:46:32 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38126 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1379188AbiFGWG4 (ORCPT ); Tue, 7 Jun 2022 18:06:56 -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 CF9B7252C39; Tue, 7 Jun 2022 12:15:54 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 4DFFE6192F; Tue, 7 Jun 2022 19:15:54 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 52E99C385A2; Tue, 7 Jun 2022 19:15:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1654629353; bh=4YDOMqXx4RcoErZe6jqiuMfx+Sf4E1czh/gF3x97jlY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=XUDucJMhcbMuN3bxjprPrkgwsijJF5tUYiCgHw2KteGb/fPtoJxp6JFhMokXOvxTA JPVHLiYnlLGAoudeEp4m92urOJk/mr/1895bd+yYGoK90qTUPDvRUWQZEeM82WCbuT 1+CBn5P0LR4ye84jGi+Vq1IbB5mojbfwac5PWb5U= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Jakob Koschel , Chao Yu , Jaegeuk Kim , Sasha Levin Subject: [PATCH 5.18 660/879] f2fs: fix dereference of stale list iterator after loop body Date: Tue, 7 Jun 2022 19:02:58 +0200 Message-Id: <20220607165022.005037060@linuxfoundation.org> X-Mailer: git-send-email 2.36.1 In-Reply-To: <20220607165002.659942637@linuxfoundation.org> References: <20220607165002.659942637@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-3.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RDNS_NONE,SPF_HELO_NONE,T_SCC_BODY_TEXT_LINE autolearn=unavailable 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: X-Mailing-List: linux-kernel@vger.kernel.org From: Jakob Koschel [ Upstream commit 2aaf51dd39afb6d01d13f1e6fe20b684733b37d5 ] The list iterator variable will be a bogus pointer if no break was hit. Dereferencing it (cur->page in this case) could load an out-of-bounds/undefined value making it unsafe to use that in the comparision to determine if the specific element was found. Since 'cur->page' *can* be out-ouf-bounds it cannot be guaranteed that by chance (or intention of an attacker) it matches the value of 'page' even though the correct element was not found. This is fixed by using a separate list iterator variable for the loop and only setting the original variable if a suitable element was found. Then determing if the element was found is simply checking if the variable is set. Fixes: 8c242db9b8c0 ("f2fs: fix stale ATOMIC_WRITTEN_PAGE private pointer") Signed-off-by: Jakob Koschel Reviewed-by: Chao Yu Signed-off-by: Jaegeuk Kim Signed-off-by: Sasha Levin --- fs/f2fs/segment.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c index bd9731cdec56..9dd9f88b75e9 100644 --- a/fs/f2fs/segment.c +++ b/fs/f2fs/segment.c @@ -355,16 +355,19 @@ void f2fs_drop_inmem_page(struct inode *inode, struct page *page) struct f2fs_sb_info *sbi = F2FS_I_SB(inode); struct list_head *head = &fi->inmem_pages; struct inmem_pages *cur = NULL; + struct inmem_pages *tmp; f2fs_bug_on(sbi, !page_private_atomic(page)); mutex_lock(&fi->inmem_lock); - list_for_each_entry(cur, head, list) { - if (cur->page == page) + list_for_each_entry(tmp, head, list) { + if (tmp->page == page) { + cur = tmp; break; + } } - f2fs_bug_on(sbi, list_empty(head) || cur->page != page); + f2fs_bug_on(sbi, !cur); list_del(&cur->list); mutex_unlock(&fi->inmem_lock); -- 2.35.1