From patchwork Thu Mar 20 06:39:02 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrei Vagin X-Patchwork-Id: 14023468 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 95285C28B30 for ; Thu, 20 Mar 2025 06:39:52 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 6572F280003; Thu, 20 Mar 2025 02:39:51 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 5E091280001; Thu, 20 Mar 2025 02:39:51 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 45924280003; Thu, 20 Mar 2025 02:39:51 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 20639280001 for ; Thu, 20 Mar 2025 02:39:51 -0400 (EDT) Received: from smtpin13.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 91E871C8044 for ; Thu, 20 Mar 2025 06:39:51 +0000 (UTC) X-FDA: 83240978982.13.EFA1BB8 Received: from mail-io1-f73.google.com (mail-io1-f73.google.com [209.85.166.73]) by imf02.hostedemail.com (Postfix) with ESMTP id CE4F680005 for ; Thu, 20 Mar 2025 06:39:49 +0000 (UTC) Authentication-Results: imf02.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=dTQjhJlv; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf02.hostedemail.com: domain of 3NLjbZwYKCFk1M179E7FF7C5.3FDC9ELO-DDBM13B.FI7@flex--avagin.bounces.google.com designates 209.85.166.73 as permitted sender) smtp.mailfrom=3NLjbZwYKCFk1M179E7FF7C5.3FDC9ELO-DDBM13B.FI7@flex--avagin.bounces.google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1742452789; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=h+zYWV6NSopuldnNVazhY6YUnTYuwrgpgyF3WHeSVI8=; b=ZMs2R/1r4ZbIR2kul0RDRfEywP0ilqCPq7J9hzmxCepEFoinEIBA/TNSoGb0g/dHiM9iTA uTX9Bkr+ICXiM3dxQrX+1vY65cg6uL4imXfrCWyW9J3v5XUsnlM1b6wdZMANFdc7aTuU8g DU8t6SrHh/MHkuRVVj7qf3eugfgwOZQ= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1742452789; a=rsa-sha256; cv=none; b=xZTVQgjoi+WVh7+AWASesukUMRZdRpOBbtjkZP5g2UlUHrOK2QCC8FteDfUix0Q4PetYQ+ qS4VofW7bCwGL4lQtQD+gmLBn+GXcfs18Uy2nT/J6t2uxwReMaaqVgqFIZX14xvHuhxFWJ qRMQLbAPpIla2j/Q9O8vVT5yzoosQSY= ARC-Authentication-Results: i=1; imf02.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=dTQjhJlv; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf02.hostedemail.com: domain of 3NLjbZwYKCFk1M179E7FF7C5.3FDC9ELO-DDBM13B.FI7@flex--avagin.bounces.google.com designates 209.85.166.73 as permitted sender) smtp.mailfrom=3NLjbZwYKCFk1M179E7FF7C5.3FDC9ELO-DDBM13B.FI7@flex--avagin.bounces.google.com Received: by mail-io1-f73.google.com with SMTP id ca18e2360f4ac-85dad593342so39605939f.1 for ; Wed, 19 Mar 2025 23:39:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1742452789; x=1743057589; darn=kvack.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=h+zYWV6NSopuldnNVazhY6YUnTYuwrgpgyF3WHeSVI8=; b=dTQjhJlv35OVDvcb291mI0Y25Fdo8vXsOdk94r9ycwhcw3L6u8TkxxHjzPfLjt8QhT ewZbzJBqymweZ9XEuSHBJfw1JvLogW3wJiVSLMlHxFbSFBRT0vvEANQj5xbBnkzIElKq DtU/cLeMsM4/g1ZUNQPg2ZV9vS62qz/6DvfTqx/nAiZqVxrMuIBhNb7/JwA6qiIGrP5L pL0UsomcOb8yJYRMwWGsYHPZhTRbBDznFTn6Mep6vpZl+C30Zvt0N3jcNgweHatmorwT TGpfEIuYg5Himl8vyT9s5iWcr3hbVgGFiwtjrfoImobiaidH4A7HGAJjDGvLuKJ5bC7I A4vw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742452789; x=1743057589; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=h+zYWV6NSopuldnNVazhY6YUnTYuwrgpgyF3WHeSVI8=; b=C6kWlm8mMhBTfrZkEsuwmZ32dlfQ+XFPGCvrZFqYicDPDsQawc+sc6H6HTRoHd8LnX MV814AqjsTl1h8KW79Z965uWtD2b0CTQH6G5dZyxCKLaw7Net0j4FeiY5sjPU+EAWO6e AE5DSXL5I5x49Relx1pIcTkPSGdUssHMwiwL+s/kTwAk8A4He4+AJXYrmNlXycMNpiiV 08+1kN3Lne2IHWiUntq9fYSKdrpzkM9+jOlmKEiLY84IR6aaJUCrsXJ1WKF8QShwgziF LO9RxtBX5EcD0AYQrLAwj1/8SLTB8nG4P39zzXniVHy3uH0qNnsLAuJX4KE5+8bP403R 3j4w== X-Forwarded-Encrypted: i=1; AJvYcCW+LRfatSht1Nu8HNGyCrpZxBSn6oCtwYPcC0MTNlpfkPuU5kVCn5b2pkCR7KP2FD4HRBR4YM6eYA==@kvack.org X-Gm-Message-State: AOJu0YxkeKRO055Zz+FNF1O75hCXkLGZW2zQFCrpYNjmdnlPphgqtObw /S49v2aCjDZhmVC9EUtt9ho5rLw/5d7UXb4Ve8r7k0WLZZlZUChmgqs2oNAvbxRKXTFPsAHKk6i Peg== X-Google-Smtp-Source: AGHT+IEbcL33dk/wm6GLcLtAt9md7WDVC/RMdK0m0WYXEIIuByDZLRnpM5nzkyuglrbRs0eWMcYPoPCXpKg= X-Received: from iobbw12.prod.google.com ([2002:a05:6602:398c:b0:85d:9d10:cab7]) (user=avagin job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6602:4c8d:b0:85b:46d7:1886 with SMTP id ca18e2360f4ac-85e137da946mr646941939f.7.1742452788937; Wed, 19 Mar 2025 23:39:48 -0700 (PDT) Date: Thu, 20 Mar 2025 06:39:02 +0000 In-Reply-To: <20250320063903.2685882-1-avagin@google.com> Mime-Version: 1.0 References: <20250320063903.2685882-1-avagin@google.com> X-Mailer: git-send-email 2.49.0.rc1.451.g8f38331e32-goog Message-ID: <20250320063903.2685882-2-avagin@google.com> Subject: [PATCH 1/2] fs/proc: extend the PAGEMAP_SCAN ioctl to report guard regions From: Andrei Vagin To: Lorenzo Stoakes , Andrew Morton Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, linux-fsdevel@vger.kernel.org, linux-doc@vger.kernel.org, David Hildenbrand , Shuah Khan , Jonathan Corbet , Andrei Vagin X-Rspam-User: X-Rspamd-Server: rspam04 X-Rspamd-Queue-Id: CE4F680005 X-Stat-Signature: eij6d9cw3zwbn751qgrrsi7cdxt1qidw X-HE-Tag: 1742452789-373409 X-HE-Meta: U2FsdGVkX18BeWZRrdkicXQ45fpZY3bHlhpbHqXKTLeh923xRBQoEZ1OK5Zj6ap0aHktJFG4C78u8IWV4zDNR7gmODL89yg6mpv8DEXmMYEb3GP3sV7b3byOp0JTQrRUUHqmOGbCEbq077bFp1yovAYinRqf7GXbXUi2UZax436zVlyc+nDiyrsAWjHNV77tXWgylOnsiy/rJsT/Q/EYzuKUBUg+wuNS47+WEcQRTLHbcmtniRp2KnzHb8Zx2zEHeLtncdTpZHjmMVRbndjCVu2NF5qwJ0uF0pRgLMsZxBbXeYIly7LAX6VhNPiaQkUJoZdcmCmWUWVCYZQDlqR4GSdUHhjrxqextt4Px3oda8ymO/KJnCm12xDREDJVUqVc7jCTKWpeyQf1rzFLwafflorMdmTEPsOfDD+Zc6pAhYQWU5Qv3GRw5FasFANsRbCvq4yJZ7NDoQeD9GIW7soVP22wdhlXjY8oEgAdscIyC1U1vJ6DKtah9gUYxrTQxik8L51WC6mhh+PIezqURwenv1exzaO0XktwlqlfSm84+RhrB/L+AXLrQ6zNEVHimm/pkHvKVOARF7FICUcjv7AJY9r7qlZBBYnk6ZBVKexOMJTFEG9eBOhbT8t2h89kl1Qaus18P3L2Q+KKmasJCZZLjOiyflItEV6JlVT0oONwzJqf3f6CW2Se05AIy0tCtovZ7S+LV52QI9Hx8+fyDSmEclHZv1yaPCNsR2OAZ+psXFKk25AOT9aC/TGqE5sLNJgSciNvVTOVAq7vMnNt1PytA1hnw1rrzukzryAk3RApQty865PELaMDZRnecGo+k99YPwZjtbAE6EH0oO3MFe+AlOKSTqwIv4fOaurSkNTxLubny27xC/6Eu1DFMe4L0XUJrHW/rGPYF70o6JxC4sXtlXFkOz50IT7142AMqMf4Fu+DUFqIY2Wps/+nJuqvxWAB9VeaQc34a/722OqdZG1 jGelnh7h iRB5GV7rJ78QVdrUjyymOR+TswpEoFnd8oDiMWqgDvrawHsCcsYy+2k/Qa0+Zjd9hUU9V8J1S3RdJzHjlOkitbJRHSobS/7mS+WLMn1on18pHiAI9Ax9k35XnIuavO03lsW8YUFmKQjtVV/oW+SmdDS1kPLAycWfxjvecsxqpD68uvqRpD5Tp818nFYmD9350bCSgCVkBCDeKgheyDEKnwRoIu+ViieweDmkmtuUqCKH3td9EGZyMy5YpzmWB87MPL0/66IfGSzYcJab/yE8DFK8gBo1n/jEZUg+zzTjRwiBRaOfJJZpbcShtpeyKB2DUpb38mEVrrh/3cU0Yypqw8cxXXP6BMrK1Ynn10W1LEzWK8G67+a7gdp7x6n5Jd4tWtE4SAX7Wh4VUBP7+JCk7Dresvh/D/MDa6QE4zvdMZ7aF+1t30Bbu+tOn+MS3UOrcjmtipowggnKkGG/lib6zVgO1NR/FlXhlP80kW51dokDcxSeuXJ5eCFJimE/EePdtOfZCzgh6IncGzrPw50YLG2SbheMDFPc/2OG2XByYUbdmPqKrTQvQxhbAuK1HLrM33TloEAhWQppI6g9Ebht8rdW3rFA77dCjh0lHCZBrVevnJQ1UreqvAao8HbXlNHI+CQ4L2NL28GdvpJyDZwfvzcEBafCko9IwHihW9986IRBGEH4= X-Bogosity: Ham, tests=bogofilter, spamicity=0.004818, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: From: Andrei Vagin Introduce the PAGE_IS_GUARD flag in the PAGEMAP_SCAN ioctl to expose information about guard regions. This allows userspace tools, such as CRIU, to detect and handle guard regions. Signed-off-by: Andrei Vagin Reviewed-by: Lorenzo Stoakes Acked-by: David Hildenbrand --- Documentation/admin-guide/mm/pagemap.rst | 1 + fs/proc/task_mmu.c | 8 ++++++-- include/uapi/linux/fs.h | 1 + 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/Documentation/admin-guide/mm/pagemap.rst b/Documentation/admin-guide/mm/pagemap.rst index a297e824f990..7997b67ffc97 100644 --- a/Documentation/admin-guide/mm/pagemap.rst +++ b/Documentation/admin-guide/mm/pagemap.rst @@ -234,6 +234,7 @@ Following flags about pages are currently supported: - ``PAGE_IS_PFNZERO`` - Page has zero PFN - ``PAGE_IS_HUGE`` - Page is PMD-mapped THP or Hugetlb backed - ``PAGE_IS_SOFT_DIRTY`` - Page is soft-dirty +- ``PAGE_IS_GUARD`` - Page is a guard region The ``struct pm_scan_arg`` is used as the argument of the IOCTL. diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c index c17615e21a5d..698d660bfee4 100644 --- a/fs/proc/task_mmu.c +++ b/fs/proc/task_mmu.c @@ -2067,7 +2067,8 @@ static int pagemap_release(struct inode *inode, struct file *file) #define PM_SCAN_CATEGORIES (PAGE_IS_WPALLOWED | PAGE_IS_WRITTEN | \ PAGE_IS_FILE | PAGE_IS_PRESENT | \ PAGE_IS_SWAPPED | PAGE_IS_PFNZERO | \ - PAGE_IS_HUGE | PAGE_IS_SOFT_DIRTY) + PAGE_IS_HUGE | PAGE_IS_SOFT_DIRTY | \ + PAGE_IS_GUARD) #define PM_SCAN_FLAGS (PM_SCAN_WP_MATCHING | PM_SCAN_CHECK_WPASYNC) struct pagemap_scan_private { @@ -2108,8 +2109,11 @@ static unsigned long pagemap_page_category(struct pagemap_scan_private *p, if (!pte_swp_uffd_wp_any(pte)) categories |= PAGE_IS_WRITTEN; + swp = pte_to_swp_entry(pte); + if (is_guard_swp_entry(swp)) + categories |= PAGE_IS_GUARD; + if (p->masks_of_interest & PAGE_IS_FILE) { - swp = pte_to_swp_entry(pte); if (is_pfn_swap_entry(swp) && !folio_test_anon(pfn_swap_entry_folio(swp))) categories |= PAGE_IS_FILE; diff --git a/include/uapi/linux/fs.h b/include/uapi/linux/fs.h index 2bbe00cf1248..8aa66c5f69b7 100644 --- a/include/uapi/linux/fs.h +++ b/include/uapi/linux/fs.h @@ -363,6 +363,7 @@ typedef int __bitwise __kernel_rwf_t; #define PAGE_IS_PFNZERO (1 << 5) #define PAGE_IS_HUGE (1 << 6) #define PAGE_IS_SOFT_DIRTY (1 << 7) +#define PAGE_IS_GUARD (1 << 8) /* * struct page_region - Page region with flags From patchwork Thu Mar 20 06:39:03 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrei Vagin X-Patchwork-Id: 14023469 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id A6CEEC36001 for ; Thu, 20 Mar 2025 06:39:54 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 737CD280004; Thu, 20 Mar 2025 02:39:53 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 66E1E280001; Thu, 20 Mar 2025 02:39:53 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 44F2A280004; Thu, 20 Mar 2025 02:39:53 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id 1D42B280001 for ; Thu, 20 Mar 2025 02:39:53 -0400 (EDT) Received: from smtpin06.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 5C65CAA88B for ; Thu, 20 Mar 2025 06:39:53 +0000 (UTC) X-FDA: 83240979066.06.797C31D Received: from mail-io1-f74.google.com (mail-io1-f74.google.com [209.85.166.74]) by imf18.hostedemail.com (Postfix) with ESMTP id 9CAF51C0003 for ; Thu, 20 Mar 2025 06:39:51 +0000 (UTC) Authentication-Results: imf18.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=Afj31JiI; spf=pass (imf18.hostedemail.com: domain of 3NrjbZwYKCFs3O39BG9HH9E7.5HFEBGNQ-FFDO35D.HK9@flex--avagin.bounces.google.com designates 209.85.166.74 as permitted sender) smtp.mailfrom=3NrjbZwYKCFs3O39BG9HH9E7.5HFEBGNQ-FFDO35D.HK9@flex--avagin.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1742452791; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=AdzZEb8zIh2bnUEQF7HSdB5UkIAPD4MWW1lq1fR+Ug0=; b=VXSiikmIX8k8gUY4PIVdT+4PUj2QtXTQgOnwnAvNino2yIPiDhmN6l+3gZnM6YSBsonoVs FEd9xmU5iWcqWoMFI0jiM769yA4/dCnuOGKSDBU7sLgkXK3cWa4oEF087NVjUXrVLie6mG EXTUNzYAY6/xJfRcdSld8zkCQZgaUmY= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1742452791; a=rsa-sha256; cv=none; b=tFkZ1kDQo93/UGyppDByQS46skvmTvY1J61wKEHalhmS+ok0cTO1wiIjLMPkaxUHf2P24i Pn9ZGvWO5OawN5LlFA+NGeVq0rI045THyZUlcSpZiHrdgGIViD+k9ME9cD9Djyj1BwVRaC vkMqojhylYi+Tug+yjPMVj6pjlSOnxQ= ARC-Authentication-Results: i=1; imf18.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=Afj31JiI; spf=pass (imf18.hostedemail.com: domain of 3NrjbZwYKCFs3O39BG9HH9E7.5HFEBGNQ-FFDO35D.HK9@flex--avagin.bounces.google.com designates 209.85.166.74 as permitted sender) smtp.mailfrom=3NrjbZwYKCFs3O39BG9HH9E7.5HFEBGNQ-FFDO35D.HK9@flex--avagin.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com Received: by mail-io1-f74.google.com with SMTP id ca18e2360f4ac-85db3356bafso109835839f.3 for ; Wed, 19 Mar 2025 23:39:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1742452791; x=1743057591; darn=kvack.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=AdzZEb8zIh2bnUEQF7HSdB5UkIAPD4MWW1lq1fR+Ug0=; b=Afj31JiIcUBJ17pUMhusrtQ5agWOUwXKt5EGftMTnzf9Ve4LtfkOg9u+QEI0wclBt4 fR6OpNtcKS6ZzvmJBTCBlZSAL4hSahyeEeRLq47d3ijeSB+h2KIlvv+u1gR20r3lVuOt zZXN8VOgPKMeG7fVYMp6eKCXMNpOG5vurVueiyurHDCoD3qs4O/WNxn5OkDWTQD+RReo wrO+gATbSe9MImqXuqsDELWFXenUaR8jGGskNRMuqXTY1FBTrBMfTFkJRiOFYoag1OmH /mp8AfPd73hwOGeJZ2D2WHbYbV0LDdtP3eUGsxg4H0GsdXHDHRNDtWBZzvUyrn7eh7TS ApvA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742452791; x=1743057591; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=AdzZEb8zIh2bnUEQF7HSdB5UkIAPD4MWW1lq1fR+Ug0=; b=lyPB/M7llGIDlvocJRilXuPwfCP7M83yQR6mTukGZA7He4QE3rLLGUCUUqd7vohcSw NvZC8lBxXmtg2ufiK9zBLb2em8Q707oaq8avvj7uZUFLSD8x8xZiwxG4OaPqUsIizih2 4Mqf6n2aGdAT+N0R0FnA5Vv9cgvhRBuVZHiKqaAdqe+OJ4SxszGoUnQd1KGo/p9fH0I9 GrMM/vnvJZ5fMrMw6wAHw0lbGdcuodEOibAhqOQQ69KbJIpCnNocObW5TBfjYI5goeGp PYkzUTFq0y1eHJe6Y/ZAJuLWnKZtZO0dVffU25vZ3NxDdnuTsfiLIzeFj+8uZ5F7VczG AvZA== X-Forwarded-Encrypted: i=1; AJvYcCVfv/GUni9fDUa24xGqf4n3925t56WAzqBf54Kmg8mIb62a82a5y/wUuQC45q9OmMze4OSBoh5bgQ==@kvack.org X-Gm-Message-State: AOJu0Yxb8IcvQ2ozO1nmMhu7ZIgy6umKuaYmAnvTK/4YtPBVUecl4lgm HxpaYUt3vvn798+S6zMTnw+M6EBuK4ZnRKJ6XROyzcprKvvjwlkbM4WacjXQhELJ+Sn/XFVoxFM fsw== X-Google-Smtp-Source: AGHT+IH9m1sXlXKSr5bFdga9g4GN9qYyPPkoNzV3YUg0gItepaGaNcNSkWbPl4Pwf3Aa3OGUQddoqzehlLk= X-Received: from iobbk13.prod.google.com ([2002:a05:6602:400d:b0:85d:ac99:6c85]) (user=avagin job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6602:4744:b0:85d:9a7a:8169 with SMTP id ca18e2360f4ac-85e13647c3dmr667556939f.0.1742452790845; Wed, 19 Mar 2025 23:39:50 -0700 (PDT) Date: Thu, 20 Mar 2025 06:39:03 +0000 In-Reply-To: <20250320063903.2685882-1-avagin@google.com> Mime-Version: 1.0 References: <20250320063903.2685882-1-avagin@google.com> X-Mailer: git-send-email 2.49.0.rc1.451.g8f38331e32-goog Message-ID: <20250320063903.2685882-3-avagin@google.com> Subject: [PATCH 2/2] selftests/mm: add PAGEMAP_SCAN guard region test From: Andrei Vagin To: Lorenzo Stoakes , Andrew Morton Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, linux-fsdevel@vger.kernel.org, linux-doc@vger.kernel.org, David Hildenbrand , Shuah Khan , Jonathan Corbet , Andrei Vagin X-Rspam-User: X-Rspamd-Server: rspam11 X-Rspamd-Queue-Id: 9CAF51C0003 X-Stat-Signature: ntantmewijow3rhjhyemp1h5pah9sjha X-HE-Tag: 1742452791-614220 X-HE-Meta: U2FsdGVkX19m2VPushVZ/Ko/KDJiF3hnYGVadp0IkZ6ZTX740X9zOErn/PihdvXpspUBSGNHDo22NOUebb6zwR1a/s6W4jFyCovmKnh3RmNO3ZNMH2FEwwzFGpzIteoUR/8OuaeFOSePipfFB0AfWg8YMwfV6yvRnyBf45tDT3kOxWqZ4glw3ejvnkqrBEXBcKNvUGnJb5nkE+/mERCFHwC97zBXSRa9XA84DsWe72+qmUtmcdX+vZt5SQ3utVbG4HUXi6oRv0GWFDyqERRv9d/4veOMd/F97aUbJDcjqoTeep2MStWJIgRG92/hny+m2gmsS9dtvOJlsTVlEKIcLijJEzN04PZLiwLz2UeFalE12MVVdj2eqwPqdnnKwmzcn0+22hAvjHX6Y5CGxoVvVKZN1BOFAB3s/thDia/glhx/Z/cDwBV+0f1xVUIny3cef/+3958O/Zvy6B3n4rmVGL0VGU6p/AR7ElV16WqpCSvtEoC06Oje/Cywym2TVQQQQCpYItMZVCZcLpBZAoBpHkwZKJ1gms3TG8aG06wC2htFgvojdZj/H68apeP+N5GUn7FNwpIRSfP9eBPyCi2YYp2fCzg1uFed4/a2s1cnCj9KVHX7kfGf+trGetvikp98zl3r5URzts7CweAxGzjis3aIENcQMdQMcDqBcWilsalkybgXXUv2G9fwxy3WID9kGcZoDZtNgLxyvRfig9jBvqjdyFcOfpu6p6eBf6pCJN3zRrlrc3Fh06VmUWWsw32cfTDkSOmJ+revKyPtDoMfKI6cwf9NtsZURN0wEboOs2ZnFA/PpNwabX+AYJWuUV9mMM6JaNX/qURxH7lqIfMR+4An9TqTv43tZGxL99/ZJCISTRDqUbwEA2vQ9qFansH6BWXcNXN96QZ7tq4Zgfrei3vxLu7eE84bFjtJC6B6PL41AHPd+FMKu7xoheHhdufkwkIoShcxBvPXSBgWACQ sjHpBV6u W4FYEkg2DVczr+jwwNPKx+xqPDqPQFwIkTY6lYXahB4qP+QJd5Djn+GbsNE/I4BC2PN4uV4wgHdyWc2i6xkFlh+NZHLAE9wbizCn7iIdRAsci2imOoK4xuiFTjPwuXsTqxKaEGUxxNDNF1XHc3ZoENR14iEUGrkZtlaWsEYHpmy5lWyAVzu1/ASSCGfP3pKgQw30M/MorAqovTNO570Q2RdsqpG+l1yKCPlbrn0yWqZIWD2Uw0rvUTaXawl2maL2vWN7wR0A09wFCcyX4dAy4/N87dTw81B07sVawbP6Yje2DTe4d/onis1kB4Xryn07aUi0C3p9kK5ySvG8sQ8EaFXfkAjfjnXcnY6aH3DrRQ+nC1uvbQYVXEmHI+QJU996n89v7NDn/znRv8l0B+gKuYT8du54/IJZRLfjZD8swZxJN2FDMbYNJGb8kMY2+/5+htrsLPxi27R12bRrQeLDwAR1rOIZm3J8ac3XS95TatvYcbCDXZhZpb4NV4w1mOJNWYUAgbb/gMU/apNG9OXP2UZGfHwg0xyIs4N3TWJHexqtZ7NCGPKfJstF2TZvdjLQ6kT04cA92TbILdVMhuyRdFYk0Jb/CpHFR4kSUSKtzNjZ0oIWnEXAAHwPZiw== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: From: Andrei Vagin Add a selftest to verify the PAGEMAP_SCAN ioctl correctly reports guard regions using the newly introduced PAGE_IS_GUARD flag. Signed-off-by: Andrei Vagin --- tools/testing/selftests/mm/guard-regions.c | 53 ++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/tools/testing/selftests/mm/guard-regions.c b/tools/testing/selftests/mm/guard-regions.c index 0c7183e8b661..24e09092fda5 100644 --- a/tools/testing/selftests/mm/guard-regions.c +++ b/tools/testing/selftests/mm/guard-regions.c @@ -8,6 +8,7 @@ #include #include #include +#include #include #include #include @@ -2079,4 +2080,56 @@ TEST_F(guard_regions, pagemap) ASSERT_EQ(munmap(ptr, 10 * page_size), 0); } +/* + * Assert that PAGEMAP_SCAN correctly reports guard region ranges. + */ +TEST_F(guard_regions, pagemap_scan) +{ + const unsigned long page_size = self->page_size; + struct page_region pm_regs[10]; + struct pm_scan_arg pm_scan_args = { + .size = sizeof(struct pm_scan_arg), + .category_anyof_mask = PAGE_IS_GUARD, + .return_mask = PAGE_IS_GUARD, + .vec = (long)&pm_regs, + .vec_len = ARRAY_SIZE(pm_regs), + }; + int proc_fd, i; + char *ptr; + + proc_fd = open("/proc/self/pagemap", O_RDONLY); + ASSERT_NE(proc_fd, -1); + + ptr = mmap_(self, variant, NULL, 10 * page_size, + PROT_READ | PROT_WRITE, 0, 0); + ASSERT_NE(ptr, MAP_FAILED); + + pm_scan_args.start = (long)ptr; + pm_scan_args.end = (long)ptr + 10 * page_size; + ASSERT_EQ(ioctl(proc_fd, PAGEMAP_SCAN, &pm_scan_args), 0); + ASSERT_EQ(pm_scan_args.walk_end, (long)ptr + 10 * page_size); + + /* Install a guard region in every other page. */ + for (i = 0; i < 10; i += 2) { + char *ptr_p = &ptr[i * page_size]; + + ASSERT_EQ(syscall(__NR_madvise, ptr_p, page_size, MADV_GUARD_INSTALL), 0); + } + + ASSERT_EQ(ioctl(proc_fd, PAGEMAP_SCAN, &pm_scan_args), 5); + ASSERT_EQ(pm_scan_args.walk_end, (long)ptr + 10 * page_size); + + /* Re-read from pagemap, and assert guard regions are detected. */ + for (i = 0; i < 5; i++) { + long ptr_p = (long)&ptr[2 * i * page_size]; + + ASSERT_EQ(pm_regs[i].start, ptr_p); + ASSERT_EQ(pm_regs[i].end, ptr_p + page_size); + ASSERT_EQ(pm_regs[i].categories, PAGE_IS_GUARD); + } + + ASSERT_EQ(close(proc_fd), 0); + ASSERT_EQ(munmap(ptr, 10 * page_size), 0); +} + TEST_HARNESS_MAIN