From patchwork Mon Jul 25 14:20:46 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Xu X-Patchwork-Id: 12928122 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 4CA93C43334 for ; Mon, 25 Jul 2022 14:21:21 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id E56FB940007; Mon, 25 Jul 2022 10:21:20 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id E0696900002; Mon, 25 Jul 2022 10:21:20 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id CCE91940007; Mon, 25 Jul 2022 10:21:20 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id BED73900002 for ; Mon, 25 Jul 2022 10:21:20 -0400 (EDT) Received: from smtpin06.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id 97FFD1402D2 for ; Mon, 25 Jul 2022 14:21:20 +0000 (UTC) X-FDA: 79725834720.06.E9EBEC6 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by imf28.hostedemail.com (Postfix) with ESMTP id AA1EFC00B3 for ; Mon, 25 Jul 2022 14:20:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1658758854; h=from:from: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:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=L+PLJwm8I4XNgq7thKsEyZwGg7Y79QmzOuQLBYBftOA=; b=bO4TuYVoHBVDAp21AMS7FiXdeXBvovCvhniJCRTTs+wfupD2Es7ArgdzCLoOkbiK9KMcV+ +Ubt0YtOtSY1yJFAHvggPAfOp4e+5DaJKGIKRx+I/UUGSicx9zxrXAOhefiajaZbDKOQhu neBKZbU67XdmINkJhWtL2mtWfVnwkrE= Received: from mail-qv1-f70.google.com (mail-qv1-f70.google.com [209.85.219.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-67-AzVR0b2dP9qPvJfohjX9rQ-1; Mon, 25 Jul 2022 10:20:52 -0400 X-MC-Unique: AzVR0b2dP9qPvJfohjX9rQ-1 Received: by mail-qv1-f70.google.com with SMTP id e1-20020ad44181000000b00472f8ad6e71so7729567qvp.20 for ; Mon, 25 Jul 2022 07:20:52 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=L+PLJwm8I4XNgq7thKsEyZwGg7Y79QmzOuQLBYBftOA=; b=6xP+GUkJ1tKj/pnw7KH3sFglgae3vSRcJ8eDE1w/u5YUAZKx4TifGOAuUh3L+gJ4EF lHzjYSneXNq1v4vLMGxCX2sGj0coiqbfSCYJ40tSGuqXskB2VJ4qQE+p5Ur+4+EFDPM4 NUdHw8WoObQLIJZXeqEa5jWQ1JQqvXvrFEa5BxJV1opITqjcoeVFi8mek0E/XetU+zLq UyTxEX6JcQ3pnnc2fdeBYT4AzLEAERrGCWwjyhj8LBdkXbj2ZU4qxsQM/UOWuXnrC+XZ RDI8vD51YLmUKk9EBW1qSbo6ImNVntVt1d0FR3f+e/YTjMgqu7U3Gh9/QfiOz5cHC3Ir UrRg== X-Gm-Message-State: AJIora9H9CTKxIOju3QSiefIJzBAOmKIY4PVvQgfDluKVmXI7Pd2ottD LEAUxe44j3U1mg4bzjdqtcIOxm6RlIdJDNiKhMQFs/FLBW6+UrqmfgZiFeEelj6LxbKf+gToqUy ZTtPx57vTDZ8= X-Received: by 2002:a05:620a:29d6:b0:6b5:bd2a:7d6c with SMTP id s22-20020a05620a29d600b006b5bd2a7d6cmr8958395qkp.322.1658758851811; Mon, 25 Jul 2022 07:20:51 -0700 (PDT) X-Google-Smtp-Source: AGRyM1vQlOnDDtn0B1X4C7h3+oTl7Q6HIl52JZgS9lE9HukTaSgN/hsfyN4YSFElUBcqMbdEwPEPzQ== X-Received: by 2002:a05:620a:29d6:b0:6b5:bd2a:7d6c with SMTP id s22-20020a05620a29d600b006b5bd2a7d6cmr8958367qkp.322.1658758851484; Mon, 25 Jul 2022 07:20:51 -0700 (PDT) Received: from localhost.localdomain (bras-base-aurron9127w-grc-35-70-27-3-10.dsl.bell.ca. [70.27.3.10]) by smtp.gmail.com with ESMTPSA id ey14-20020a05622a4c0e00b0031f0ab4eceasm7626071qtb.7.2022.07.25.07.20.50 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Mon, 25 Jul 2022 07:20:50 -0700 (PDT) From: Peter Xu To: linux-kernel@vger.kernel.org, linux-mm@kvack.org Cc: peterx@redhat.com, Nadav Amit , Andrea Arcangeli , Andrew Morton , David Hildenbrand Subject: [PATCH v4 1/3] mm/mprotect: Fix soft-dirty check in can_change_pte_writable() Date: Mon, 25 Jul 2022 10:20:46 -0400 Message-Id: <20220725142048.30450-2-peterx@redhat.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20220725142048.30450-1-peterx@redhat.com> References: <20220725142048.30450-1-peterx@redhat.com> MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-type: text/plain X-Rspam-User: X-Rspamd-Server: rspam04 X-Rspamd-Queue-Id: AA1EFC00B3 Authentication-Results: imf28.hostedemail.com; dkim=temperror ("DNS error when getting key") header.d=redhat.com header.s=mimecast20190719 header.b=bO4TuYVo; dmarc=temperror reason="query timed out" header.from=redhat.com (policy=temperror); spf=temperror (imf28.hostedemail.com: error in processing during lookup of peterx@redhat.com: DNS error) smtp.mailfrom=peterx@redhat.com X-Stat-Signature: kcn8tmy641ejtijghsf6bukcwzni7y5h X-HE-Tag: 1658758854-898250 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: The check wanted to make sure when soft-dirty tracking is enabled we won't grant write bit by accident, as a page fault is needed for dirty tracking. The intention is correct but we didn't check it right because VM_SOFTDIRTY set actually means soft-dirty tracking disabled. Fix it. There's another thing tricky about soft-dirty is that, we can't check the vma flag !(vma_flags & VM_SOFTDIRTY) directly but only check it after we checked CONFIG_MEM_SOFT_DIRTY because otherwise VM_SOFTDIRTY will be defined as zero, and !(vma_flags & VM_SOFTDIRTY) will constantly return true. To avoid misuse, introduce a helper for checking whether vma has soft-dirty tracking enabled. We can easily verify this with any exclusive anonymous page, like program below: =======8<====== #include #include #include #include #include #include #include #include #include #include #include #include #include #define BIT_ULL(nr) (1ULL << (nr)) #define PM_SOFT_DIRTY BIT_ULL(55) unsigned int psize; char *page; uint64_t pagemap_read_vaddr(int fd, void *vaddr) { uint64_t value; int ret; ret = pread(fd, &value, sizeof(uint64_t), ((uint64_t)vaddr >> 12) * sizeof(uint64_t)); assert(ret == sizeof(uint64_t)); return value; } void clear_refs_write(void) { int fd = open("/proc/self/clear_refs", O_RDWR); assert(fd >= 0); write(fd, "4", 2); close(fd); } #define check_soft_dirty(str, expect) do { \ bool dirty = pagemap_read_vaddr(fd, page) & PM_SOFT_DIRTY; \ if (dirty != expect) { \ printf("ERROR: %s, soft-dirty=%d (expect: %d)\n", str, dirty, expect); \ exit(-1); \ } \ } while (0) int main(void) { int fd = open("/proc/self/pagemap", O_RDONLY); assert(fd >= 0); psize = getpagesize(); page = mmap(NULL, psize, PROT_READ|PROT_WRITE, MAP_ANONYMOUS|MAP_PRIVATE, -1, 0); assert(page != MAP_FAILED); *page = 1; check_soft_dirty("Just faulted in page", 1); clear_refs_write(); check_soft_dirty("Clear_refs written", 0); mprotect(page, psize, PROT_READ); check_soft_dirty("Marked RO", 0); mprotect(page, psize, PROT_READ|PROT_WRITE); check_soft_dirty("Marked RW", 0); *page = 2; check_soft_dirty("Wrote page again", 1); munmap(page, psize); close(fd); printf("Test passed.\n"); return 0; } =======8<====== Here we attach a Fixes to commit 64fe24a3e05e only for easy tracking, as this patch won't apply to a tree before that point. However the commit wasn't the source of problem, but instead 64e455079e1b. It's just that after 64fe24a3e05e anonymous memory will also suffer from this problem with mprotect(). Fixes: 64e455079e1b ("mm: softdirty: enable write notifications on VMAs after VM_SOFTDIRTY cleared") Fixes: 64fe24a3e05e ("mm/mprotect: try avoiding write faults for exclusive anonymous pages when changing protection") Reviewed-by: David Hildenbrand Signed-off-by: Peter Xu --- mm/internal.h | 18 ++++++++++++++++++ mm/mmap.c | 2 +- mm/mprotect.c | 2 +- 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/mm/internal.h b/mm/internal.h index 15e8cb118832..e2d442e3c0b2 100644 --- a/mm/internal.h +++ b/mm/internal.h @@ -860,4 +860,22 @@ struct folio *try_grab_folio(struct page *page, int refs, unsigned int flags); DECLARE_PER_CPU(struct per_cpu_nodestat, boot_nodestats); +static inline bool vma_soft_dirty_enabled(struct vm_area_struct *vma) +{ + /* + * NOTE: we must check this before VM_SOFTDIRTY on soft-dirty + * enablements, because when without soft-dirty being compiled in, + * VM_SOFTDIRTY is defined as 0x0, then !(vm_flags & VM_SOFTDIRTY) + * will be constantly true. + */ + if (!IS_ENABLED(CONFIG_MEM_SOFT_DIRTY)) + return false; + + /* + * Soft-dirty is kind of special: its tracking is enabled when the + * vma flags not set. + */ + return !(vma->vm_flags & VM_SOFTDIRTY); +} + #endif /* __MM_INTERNAL_H */ diff --git a/mm/mmap.c b/mm/mmap.c index 125e8903c93c..93f9913409ea 100644 --- a/mm/mmap.c +++ b/mm/mmap.c @@ -1518,7 +1518,7 @@ int vma_wants_writenotify(struct vm_area_struct *vma, pgprot_t vm_page_prot) return 0; /* Do we need to track softdirty? */ - if (IS_ENABLED(CONFIG_MEM_SOFT_DIRTY) && !(vm_flags & VM_SOFTDIRTY)) + if (vma_soft_dirty_enabled(vma)) return 1; /* Specialty mapping? */ diff --git a/mm/mprotect.c b/mm/mprotect.c index 0420c3ed936c..c403e84129d4 100644 --- a/mm/mprotect.c +++ b/mm/mprotect.c @@ -49,7 +49,7 @@ static inline bool can_change_pte_writable(struct vm_area_struct *vma, return false; /* Do we need write faults for softdirty tracking? */ - if ((vma->vm_flags & VM_SOFTDIRTY) && !pte_soft_dirty(pte)) + if (vma_soft_dirty_enabled(vma) && !pte_soft_dirty(pte)) return false; /* Do we need write faults for uffd-wp tracking? */ From patchwork Mon Jul 25 14:20:47 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Xu X-Patchwork-Id: 12928121 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 5AC96C43334 for ; Mon, 25 Jul 2022 14:21:04 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id F1A9F900003; Mon, 25 Jul 2022 10:21:03 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id ECA5B900002; Mon, 25 Jul 2022 10:21:03 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id D6AF3900003; Mon, 25 Jul 2022 10:21:03 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id C6811900002 for ; Mon, 25 Jul 2022 10:21:03 -0400 (EDT) Received: from smtpin29.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 9AA29A053E for ; Mon, 25 Jul 2022 14:21:03 +0000 (UTC) X-FDA: 79725834006.29.CCF8FAF Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by imf11.hostedemail.com (Postfix) with ESMTP id 33E1B400AD for ; Mon, 25 Jul 2022 14:21:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1658758862; h=from:from: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:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=STjP3t9YbLJwojrLrn71AA0kDkPsgXvwkazzQEZtuik=; b=WSntHzKcjzumJi+/bfPa1ZxJZNlEOHa7Pqh5TJq++eHreDcUkcB9eSnov7y9KiTuAnky+t f8pNUZkkg4HEqX2IwBEJeg3OaFFeSNRKA0sD9/1y/9I/nEzj+t3txq2z1KjMvdEn2JQK23 rlfee3IHN04rLatFFSwbJDlIUv+a2fU= Received: from mail-qk1-f199.google.com (mail-qk1-f199.google.com [209.85.222.199]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-668-O7RiQIpYNPqBzTnS2lPAgQ-1; Mon, 25 Jul 2022 10:20:53 -0400 X-MC-Unique: O7RiQIpYNPqBzTnS2lPAgQ-1 Received: by mail-qk1-f199.google.com with SMTP id v13-20020a05620a0f0d00b006b5f0ec742eso9848623qkl.2 for ; Mon, 25 Jul 2022 07:20:53 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=STjP3t9YbLJwojrLrn71AA0kDkPsgXvwkazzQEZtuik=; b=GhXxd4g6jRTgfSRv+hXxbZZFYn1Mtyc+ia+dPNL99+xueC0Avl3TFU8M9n5C0Rw/tQ rrtjjOXrXec0jeVjMBUYTO5DN8Ej2VjxC2ZiwpFYCabuBhU79fLMMq1Y6g2AJAzjX5Ph 0IXuGy9bMyGlbfbsf+V8PSf18RcWz04OoD65Wlt4e32/Mna0JchRAKHFvw81a7bAMOUX fPGVvmym3IMt2J6QWsj4qvAkl2jWna8FYb8htLqoH1MopQsyVwPBA+tDucwN6THy7lHH xkMLOQjVFxKezWXsfpqf6vumRe4z3wN2g5Sw3t8JVFQCMuJCEuoLkyJ0WwTQvXdurV3a g4aA== X-Gm-Message-State: AJIora8khXXt+rvGYv+jgXpZeLD15IS3GpUadTRYITazfqB0xwLTHJ44 WIMFn265B9YBCzdu8UMB5nPgtJCKK+PgGLw6oSpoXOQIwXfKyvoSdQyG/MvU4btyrmY4V7PSmXa qETaxrobVMrU= X-Received: by 2002:ac8:5c4d:0:b0:31e:f794:1b18 with SMTP id j13-20020ac85c4d000000b0031ef7941b18mr10146897qtj.282.1658758853390; Mon, 25 Jul 2022 07:20:53 -0700 (PDT) X-Google-Smtp-Source: AGRyM1sStdRCgHvQrB2KOO87tQRFjODWSSk/7IEOUYRzTexVJXfNYA2gVOTDz2PPoGKw5RZmrvYmsQ== X-Received: by 2002:ac8:5c4d:0:b0:31e:f794:1b18 with SMTP id j13-20020ac85c4d000000b0031ef7941b18mr10146880qtj.282.1658758853153; Mon, 25 Jul 2022 07:20:53 -0700 (PDT) Received: from localhost.localdomain (bras-base-aurron9127w-grc-35-70-27-3-10.dsl.bell.ca. [70.27.3.10]) by smtp.gmail.com with ESMTPSA id ey14-20020a05622a4c0e00b0031f0ab4eceasm7626071qtb.7.2022.07.25.07.20.51 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Mon, 25 Jul 2022 07:20:52 -0700 (PDT) From: Peter Xu To: linux-kernel@vger.kernel.org, linux-mm@kvack.org Cc: peterx@redhat.com, Nadav Amit , Andrea Arcangeli , Andrew Morton , David Hildenbrand Subject: [PATCH v4 2/3] selftests: soft-dirty: Add test for mprotect Date: Mon, 25 Jul 2022 10:20:47 -0400 Message-Id: <20220725142048.30450-3-peterx@redhat.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20220725142048.30450-1-peterx@redhat.com> References: <20220725142048.30450-1-peterx@redhat.com> MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-type: text/plain ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1658758863; 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:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=STjP3t9YbLJwojrLrn71AA0kDkPsgXvwkazzQEZtuik=; b=cl8AvMomTJPwWjFxdrhQrBt8rZ4gI+zYwdSKP1YeTE3iAW/FegIP11GAJgKtwpO9EmdkRD WIaq8qLifRy0/Qdz1PJpNWLENOE//Bs5Eok7QNtJ/5BxsuwenvRMnDjkSoTyjj9kbAP/5i L8REmtw/xLiqQSJNvkHsWRs2+LVPySA= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1658758863; a=rsa-sha256; cv=none; b=0/0r3gj+XVbzyAiOU3HEHbgUAlAUrAbYq6A0CccGdOL23x+b6HwQTL1gnc8VVESBOqsa8H MUCoFa+9/SPO6RSyWy+E+ofjR6ggY3NvmGziYPRugvESTDG0G9ePWNjIQ96qFLos/X2K4E Ez+MYl8P4mZvZbORvc/Hw6PUoQJz+bc= ARC-Authentication-Results: i=1; imf11.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=WSntHzKc; spf=none (imf11.hostedemail.com: domain of peterx@redhat.com has no SPF policy when checking 170.10.133.124) smtp.mailfrom=peterx@redhat.com; dmarc=pass (policy=none) header.from=redhat.com Authentication-Results: imf11.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=WSntHzKc; spf=none (imf11.hostedemail.com: domain of peterx@redhat.com has no SPF policy when checking 170.10.133.124) smtp.mailfrom=peterx@redhat.com; dmarc=pass (policy=none) header.from=redhat.com X-Rspam-User: X-Rspamd-Queue-Id: 33E1B400AD X-Rspamd-Server: rspam05 X-Stat-Signature: pneib9bdhxi17ayyp778i9tzqdbuk3kz X-HE-Tag: 1658758862-51425 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: Add two soft-dirty test cases for mprotect() on both anon or file. Signed-off-by: Peter Xu Reviewed-by: David Hildenbrand --- tools/testing/selftests/vm/soft-dirty.c | 67 ++++++++++++++++++++++++- 1 file changed, 66 insertions(+), 1 deletion(-) diff --git a/tools/testing/selftests/vm/soft-dirty.c b/tools/testing/selftests/vm/soft-dirty.c index 08ab62a4a9d0..e3a43f5d4fa2 100644 --- a/tools/testing/selftests/vm/soft-dirty.c +++ b/tools/testing/selftests/vm/soft-dirty.c @@ -121,13 +121,76 @@ static void test_hugepage(int pagemap_fd, int pagesize) free(map); } +static void test_mprotect(int pagemap_fd, int pagesize, bool anon) +{ + const char *type[] = {"file", "anon"}; + const char *fname = "./soft-dirty-test-file"; + int test_fd; + char *map; + + if (anon) { + map = mmap(NULL, pagesize, PROT_READ|PROT_WRITE, + MAP_ANONYMOUS|MAP_PRIVATE, -1, 0); + if (!map) + ksft_exit_fail_msg("anon mmap failed\n"); + } else { + test_fd = open(fname, O_RDWR | O_CREAT); + if (test_fd < 0) { + ksft_test_result_skip("Test %s open() file failed\n", __func__); + return; + } + unlink(fname); + ftruncate(test_fd, pagesize); + map = mmap(NULL, pagesize, PROT_READ|PROT_WRITE, + MAP_SHARED, test_fd, 0); + if (!map) + ksft_exit_fail_msg("file mmap failed\n"); + } + + *map = 1; + ksft_test_result(pagemap_is_softdirty(pagemap_fd, map) == 1, + "Test %s-%s dirty bit of new written page\n", + __func__, type[anon]); + clear_softdirty(); + ksft_test_result(pagemap_is_softdirty(pagemap_fd, map) == 0, + "Test %s-%s soft-dirty clear after clear_refs\n", + __func__, type[anon]); + mprotect(map, pagesize, PROT_READ); + ksft_test_result(pagemap_is_softdirty(pagemap_fd, map) == 0, + "Test %s-%s soft-dirty clear after marking RO\n", + __func__, type[anon]); + mprotect(map, pagesize, PROT_READ|PROT_WRITE); + ksft_test_result(pagemap_is_softdirty(pagemap_fd, map) == 0, + "Test %s-%s soft-dirty clear after marking RW\n", + __func__, type[anon]); + *map = 2; + ksft_test_result(pagemap_is_softdirty(pagemap_fd, map) == 1, + "Test %s-%s soft-dirty after rewritten\n", + __func__, type[anon]); + + munmap(map, pagesize); + + if (!anon) + close(test_fd); +} + +static void test_mprotect_anon(int pagemap_fd, int pagesize) +{ + test_mprotect(pagemap_fd, pagesize, true); +} + +static void test_mprotect_file(int pagemap_fd, int pagesize) +{ + test_mprotect(pagemap_fd, pagesize, false); +} + int main(int argc, char **argv) { int pagemap_fd; int pagesize; ksft_print_header(); - ksft_set_plan(5); + ksft_set_plan(15); pagemap_fd = open(PAGEMAP_FILE_PATH, O_RDONLY); if (pagemap_fd < 0) @@ -138,6 +201,8 @@ int main(int argc, char **argv) test_simple(pagemap_fd, pagesize); test_vma_reuse(pagemap_fd, pagesize); test_hugepage(pagemap_fd, pagesize); + test_mprotect_anon(pagemap_fd, pagesize); + test_mprotect_file(pagemap_fd, pagesize); close(pagemap_fd); From patchwork Mon Jul 25 14:20:48 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Xu X-Patchwork-Id: 12928120 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 38C62C433EF for ; Mon, 25 Jul 2022 14:20:58 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id BE6A98E0001; Mon, 25 Jul 2022 10:20:57 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id B9620900002; Mon, 25 Jul 2022 10:20:57 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id A37EF8E0003; Mon, 25 Jul 2022 10:20:57 -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 94B7B8E0001 for ; Mon, 25 Jul 2022 10:20:57 -0400 (EDT) Received: from smtpin02.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 6F0491604D1 for ; Mon, 25 Jul 2022 14:20:57 +0000 (UTC) X-FDA: 79725833754.02.AE70762 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by imf26.hostedemail.com (Postfix) with ESMTP id 0469E1400A5 for ; Mon, 25 Jul 2022 14:20:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1658758856; h=from:from: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:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=1IdJxIm7Pi/v88hck1ZpRxA4gEl56WC6ZAkG/ZDca0Q=; b=LjMTOz2jL5tDGSkvIngkwkeJHTqpB9FMTvNZYrHVASEAzM6W97gSd/dP8u95FjYHmdMKlZ LVaGZxWCz7mzk2ewG7JooXF0mSaXPZlV/v1aC1OvGhJe+XiMjovwT4zhk9y7tmYKPjah3x QSJR8Odc6vpHdf/pcRJlbS/qpYnK7Bk= Received: from mail-qt1-f199.google.com (mail-qt1-f199.google.com [209.85.160.199]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-90-B-ZOCUr4PXunWaNUafbfBA-1; Mon, 25 Jul 2022 10:20:55 -0400 X-MC-Unique: B-ZOCUr4PXunWaNUafbfBA-1 Received: by mail-qt1-f199.google.com with SMTP id x11-20020ac84d4b000000b0031ed94d739dso5624753qtv.11 for ; Mon, 25 Jul 2022 07:20:55 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=1IdJxIm7Pi/v88hck1ZpRxA4gEl56WC6ZAkG/ZDca0Q=; b=Hc7u7KcTINfDd6cAErd8KB0CZoLkZ0VrKsGj8kv00adsaO/1GCMN1hahZ9E11zFSs5 SbHJXntNOF+wS5IzHLfAWPR/RQBX9PiZRI/Ad447OU71rrbvaMkLg8wzPZ0yjC3ugjkB vFxi9kN7TtHOU3hWy/RJSsT5xJ4+6CVcuwJi1bIK2SF9cxAhdGhmH9vCFZXucEr9AgiE j69gG085yEuFcPy9awkAT/tNo6dqIYV7aI1DdcScYIgN5uAoOe1GdRB71Hcf4WFz9U+N IChZn7jvRCOvGtItETVQEgEJc863WGZwE8j1wQ/0u/bSmLztnH1EvIhbyQqNYxfQeA7C wXbw== X-Gm-Message-State: AJIora+Iuce2ArP83fC3L22Z3l3Muima6duMSXVA83JatpgYTT5TkIau AGcDHYSrNumJpRrjtefEWFRn3P2nKUTD/raAMIis74EvRcQ9vP8abyRHbQ0jwvSZh4TSaS5ZKI/ ZboJIiAqVErA= X-Received: by 2002:a05:620a:4501:b0:6b5:fc79:32c with SMTP id t1-20020a05620a450100b006b5fc79032cmr9486493qkp.726.1658758855095; Mon, 25 Jul 2022 07:20:55 -0700 (PDT) X-Google-Smtp-Source: AGRyM1tuoYzI2hhOmTZFo0v8ReCc+YKwDV9FF0YFKaTwoaD98hZidKb99/Jpmlo439ptHjPPoX+xIg== X-Received: by 2002:a05:620a:4501:b0:6b5:fc79:32c with SMTP id t1-20020a05620a450100b006b5fc79032cmr9486475qkp.726.1658758854855; Mon, 25 Jul 2022 07:20:54 -0700 (PDT) Received: from localhost.localdomain (bras-base-aurron9127w-grc-35-70-27-3-10.dsl.bell.ca. [70.27.3.10]) by smtp.gmail.com with ESMTPSA id ey14-20020a05622a4c0e00b0031f0ab4eceasm7626071qtb.7.2022.07.25.07.20.53 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Mon, 25 Jul 2022 07:20:54 -0700 (PDT) From: Peter Xu To: linux-kernel@vger.kernel.org, linux-mm@kvack.org Cc: peterx@redhat.com, Nadav Amit , Andrea Arcangeli , Andrew Morton , David Hildenbrand Subject: [PATCH v4 3/3] selftests: Add soft-dirty into run_vmtests.sh Date: Mon, 25 Jul 2022 10:20:48 -0400 Message-Id: <20220725142048.30450-4-peterx@redhat.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20220725142048.30450-1-peterx@redhat.com> References: <20220725142048.30450-1-peterx@redhat.com> MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-type: text/plain ARC-Authentication-Results: i=1; imf26.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=LjMTOz2j; dmarc=pass (policy=none) header.from=redhat.com; spf=none (imf26.hostedemail.com: domain of peterx@redhat.com has no SPF policy when checking 170.10.133.124) smtp.mailfrom=peterx@redhat.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1658758857; 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:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=1IdJxIm7Pi/v88hck1ZpRxA4gEl56WC6ZAkG/ZDca0Q=; b=EDS0SN86/J7tpzYMaCA5SffwH633M2zgKNGh56eM3JmfqjKzRYFVxME8EdNFitWtqgq1pA bU2Q4FjGzYcy9nWN9TFBSicOgKLygNE+ajl1YoHD/xHepu4L/P48SRpjdMiSWqHKNItxRV 7wnsOgNcM2zgCBrsj77/dKUqu7na+rw= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1658758857; a=rsa-sha256; cv=none; b=nD8utXoeV0N31xHJbR64P1TZKx9Z8r9we4dpn9XmhIx82d/s/6ZyO7G67mbmDjUiJITkUC LNJwlqtQkGb0/UWS1HoJYR6VVJblUZ/uDMp/hbIZr0HBCeym5GQZY2uv/0cGej6JA6++mG jIY7EwNc6HbKnsW+5ESXzi1jqN0IBag= X-Rspamd-Server: rspam10 X-Rspamd-Queue-Id: 0469E1400A5 X-Rspam-User: Authentication-Results: imf26.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=LjMTOz2j; dmarc=pass (policy=none) header.from=redhat.com; spf=none (imf26.hostedemail.com: domain of peterx@redhat.com has no SPF policy when checking 170.10.133.124) smtp.mailfrom=peterx@redhat.com X-Stat-Signature: drs5ur1duptjn5szsbuorj7wa7fbtyn8 X-HE-Tag: 1658758856-742417 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000001, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: Reviewed-by: David Hildenbrand Signed-off-by: Peter Xu --- tools/testing/selftests/vm/run_vmtests.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tools/testing/selftests/vm/run_vmtests.sh b/tools/testing/selftests/vm/run_vmtests.sh index 2af563a9652e..de86983b8a0f 100755 --- a/tools/testing/selftests/vm/run_vmtests.sh +++ b/tools/testing/selftests/vm/run_vmtests.sh @@ -190,4 +190,6 @@ then run_test ./protection_keys_64 fi +run_test ./soft-dirty + exit $exitcode