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