Received: by 2002:a05:6a10:af89:0:0:0:0 with SMTP id iu9csp3982407pxb; Tue, 25 Jan 2022 00:37:23 -0800 (PST) X-Google-Smtp-Source: ABdhPJzS7oF7mA8xY868htzZPzUQNuvWmktd2OXyRda68JWkbQ3u0gOioWdNdv8Tnl0ehFx7XBdN X-Received: by 2002:aa7:c945:: with SMTP id h5mr19241386edt.187.1643099843223; Tue, 25 Jan 2022 00:37:23 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1643099843; cv=none; d=google.com; s=arc-20160816; b=ic5b+u9DotDTSatEmhW2nzzXrg6+xm7h+MphHWso8orNzinwgJkZdowr+gFMwMhsn6 IopWZJjXCB2UdtXEaBIudBw2i5OE3s6edvCeiNGUx5R2iM5qtLnb6S1tIGmLfKScnPir hDag41GTMwcpickrzk0tEa3dIotqlAO+mynfm8lVBvthauXcihA0M9ix+WKY1YyXDX7s wMXxZ4vD7idGxWpaGNbeG19+QqRc2rbTpzJ4PzAc1DHk0/HX7+9B+FasV2x5FfCVgfy6 YhCrSLAqyeGL8D8n1riCmhACKqnn0amcH/Tj/fe5nhM6w384n0vIK5hDS8r9Km2YYah/ bb7A== 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=SArXKj9nnRinH0BXmoTuQd4fEZfWfefPggSZ+HYYvnY=; b=I8ICOb70+U9IxfL3E1gYUjFYUG66MzQFqb8WUEjMS4TLT6Qtw7qltL+54B0mUJAAAe TqgWGUgq+MsgcOSh7LOt4OO+fl9oIrq3W8DDSNWCwSH0tJQYTRLw9fQ5BIjpIeHPEhUA 7cQh0NXsW1tuskE8SmEZsKvCF9kkdL69svMsK/5C40mD0wQo8+ckYbhLoK/qJQjeuHCN d5D+yJxnU6jO/qtEvHcRwjrvQKgfTdyP4gB8eslA3qBbtxVJkX9nDC7uIUi+9uDp6c4U csehQHuutDXzS4WGjn7TC8dCWLZs1jltaNgsuBqATEZznhuG3iOLLMLr8ZQvQvQceuuK 9a2w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=fi7WEpma; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 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 vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id i18si12713483edc.401.2022.01.25.00.36.59; Tue, 25 Jan 2022 00:37:23 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=fi7WEpma; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1314658AbiAYCv1 (ORCPT + 99 others); Mon, 24 Jan 2022 21:51:27 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46600 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1349211AbiAXVFL (ORCPT ); Mon, 24 Jan 2022 16:05:11 -0500 Received: from ams.source.kernel.org (ams.source.kernel.org [IPv6:2604:1380:4601:e00::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1B971C068093; Mon, 24 Jan 2022 12:04:49 -0800 (PST) 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 ams.source.kernel.org (Postfix) with ESMTPS id D7AD3B8119E; Mon, 24 Jan 2022 20:04:47 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 46C2FC340E5; Mon, 24 Jan 2022 20:04:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1643054686; bh=6Zayg6Lj/chNfgA3QoYSYBaYHAsYWM4JNzJbEEUECcA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=fi7WEpmagRb0Hgo5LjKo0iaFGhVeBCLdM01X/XxAm2oMEqryMgeGDTRfzPkOz1lEx RpUe22nT7E7Mi5tT7eyicQrME9Ccw4ZoooqugHeJyemy6Avz0fWuc0Pnrrcvcc1b8Z 7GB63UQLR8LKr0ecSFCWqrndqoVZGzj6cnr9jMIg= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Filipe Manana , David Sterba Subject: [PATCH 5.10 471/563] btrfs: respect the max size in the header when activating swap file Date: Mon, 24 Jan 2022 19:43:56 +0100 Message-Id: <20220124184040.758131871@linuxfoundation.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220124184024.407936072@linuxfoundation.org> References: <20220124184024.407936072@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Filipe Manana commit c2f822635df873c510bda6fb7fd1b10b7c31be2d upstream. If we extended the size of a swapfile after its header was created (by the mkswap utility) and then try to activate it, we will map the entire file when activating the swap file, instead of limiting to the max size defined in the swap file's header. Currently test case generic/643 from fstests fails because we do not respect that size limit defined in the swap file's header. So fix this by not mapping file ranges beyond the max size defined in the swap header. This is the same type of bug that iomap used to have, and was fixed in commit 36ca7943ac18ae ("mm/swap: consider max pages in iomap_swapfile_add_extent"). Fixes: ed46ff3d423780 ("Btrfs: support swap files") CC: stable@vger.kernel.org # 5.4+ Reviewed-and-tested-by: Josef Bacik Reviewed-by: David Sterba Signed-off-by: David Sterba Signed-off-by: Greg Kroah-Hartman --- fs/btrfs/inode.c | 11 +++++++++++ 1 file changed, 11 insertions(+) --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c @@ -10094,9 +10094,19 @@ static int btrfs_add_swap_extent(struct struct btrfs_swap_info *bsi) { unsigned long nr_pages; + unsigned long max_pages; u64 first_ppage, first_ppage_reported, next_ppage; int ret; + /* + * Our swapfile may have had its size extended after the swap header was + * written. In that case activating the swapfile should not go beyond + * the max size set in the swap header. + */ + if (bsi->nr_pages >= sis->max) + return 0; + + max_pages = sis->max - bsi->nr_pages; first_ppage = ALIGN(bsi->block_start, PAGE_SIZE) >> PAGE_SHIFT; next_ppage = ALIGN_DOWN(bsi->block_start + bsi->block_len, PAGE_SIZE) >> PAGE_SHIFT; @@ -10104,6 +10114,7 @@ static int btrfs_add_swap_extent(struct if (first_ppage >= next_ppage) return 0; nr_pages = next_ppage - first_ppage; + nr_pages = min(nr_pages, max_pages); first_ppage_reported = first_ppage; if (bsi->start == 0)