From mboxrd@z Thu Jan 1 00:00:00 1970 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 50442D2FFFA for ; Fri, 18 Oct 2024 15:32:24 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id CFEEB6B007B; Fri, 18 Oct 2024 11:32:23 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id CAE506B0082; Fri, 18 Oct 2024 11:32:23 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id B9D366B0083; Fri, 18 Oct 2024 11:32:23 -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 9CAA96B007B for ; Fri, 18 Oct 2024 11:32:23 -0400 (EDT) Received: from smtpin24.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 3C9901A19C6 for ; Fri, 18 Oct 2024 15:32:01 +0000 (UTC) X-FDA: 82687114230.24.6237732 Received: from mail-oa1-f46.google.com (mail-oa1-f46.google.com [209.85.160.46]) by imf19.hostedemail.com (Postfix) with ESMTP id 1AED91A0012 for ; Fri, 18 Oct 2024 15:32:06 +0000 (UTC) Authentication-Results: imf19.hostedemail.com; dkim=pass header.d=linuxfoundation.org header.s=google header.b=c54gIhpT; dmarc=pass (policy=none) header.from=linuxfoundation.org; spf=pass (imf19.hostedemail.com: domain of skhan@linuxfoundation.org designates 209.85.160.46 as permitted sender) smtp.mailfrom=skhan@linuxfoundation.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1729265421; a=rsa-sha256; cv=none; b=JIsxtLP6sqg2+CFIPJBuiRZOS6zg3mDiZnR7S3Dc0dScHPArQr5Ylk//ebEY7p46xrdPWT bwTBl8s5+HGdbMELQ4BtqbDTpKQh62x7R1B2cTdRw9gYXzl+SXW3jHr9rR1kBeD32BldRu IaS3gvpmLBhQWSY7+5Dq/3Nb1oVFgLc= ARC-Authentication-Results: i=1; imf19.hostedemail.com; dkim=pass header.d=linuxfoundation.org header.s=google header.b=c54gIhpT; dmarc=pass (policy=none) header.from=linuxfoundation.org; spf=pass (imf19.hostedemail.com: domain of skhan@linuxfoundation.org designates 209.85.160.46 as permitted sender) smtp.mailfrom=skhan@linuxfoundation.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1729265421; 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=ZC7IXrCg0YuAvn8GUXeJqu+LI8owpl5cfwS2jfkhEf0=; b=A/KW285BeXdREKfzIdSoEJJaFszvx0pq5G62OhMGHkvNtlNMx3Poeloqg/tO9ehdwOklcR JMgsuIEOck1F3+ljUDkUWftJeFleTsHXtAG+R50CbUvw/pGRhNHrUARyhgZk6rnNZ5DOJN QbPSDylAp27BItPkb6jAyH2oKcpmzXY= Received: by mail-oa1-f46.google.com with SMTP id 586e51a60fabf-288a90e4394so1040915fac.0 for ; Fri, 18 Oct 2024 08:32:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linuxfoundation.org; s=google; t=1729265540; x=1729870340; darn=kvack.org; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=ZC7IXrCg0YuAvn8GUXeJqu+LI8owpl5cfwS2jfkhEf0=; b=c54gIhpTuFX3EgX/p3671OrmiIgIqEfaBaZ+mMd70MvK4oLiBvcfcKprdaaTZWGgha UwXFUyIf8aPA+oZjaCsDp5vL5ZZegQRVgoPf5LPMBW9nT2HMrQQ5cOzF0qemfH2E6g8z 7DGDLiuHGnmct06EF32U98LCEj9K6R7/37OqM= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1729265540; x=1729870340; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=ZC7IXrCg0YuAvn8GUXeJqu+LI8owpl5cfwS2jfkhEf0=; b=TQb4vkU/w61oYiZMNVZXaomHLDeO5HMwvLCfUdNY8i3BmJswxSAKzwwry2L+p+j3rH k8mlnu4s4ka7YK5C7mDmlOGNmX0fVuiBL4eC+xpU7TetOlKOmKjo1ar77TYYV7kOdpzt 47LBxfjpuLkO2kE3FI4hSUDU5TwgdUPw9wKzVl4dCXGoJ0+TwuaiN5Twv1PcWxXQXnlE LcX//j9RT9jcUOtz7y5HWEHTKmeIRkDTXe9k1G6vsUg9CCO7HWjqFRD9qb2eI4GBZHep JGk6/BFdZsCrhH6KjNDG5ueu0YvIV+Ytl8fYTJHpe+icqUmGcbspTz5dFzX5NCsPjEJ9 AEJA== X-Forwarded-Encrypted: i=1; AJvYcCWxymuESrlLdSp0ubAH0vde2n134Q8YReD2LNLB6WbE9tHND2za+KL320hjYZmJgdkQOnHiTH2E2w==@kvack.org X-Gm-Message-State: AOJu0YymT1FP7C+wO55+geObdNWU9Dj4UDgEQiO7sBxpe3TOzXPKMIS9 tMg0wvCxRk6OCxy6Ucsy1Z7sx6R0GmiQ5iWSwZ8933eEKGbXIG8dGqyjO/eGGBg= X-Google-Smtp-Source: AGHT+IFVILzQC3xLfv6R4AbCBfFL0IO4Vwr3Q+ju2/Ycfjj5wO6b5XNWyVkiIkvrRdK6DAeUYrsI+g== X-Received: by 2002:a05:6870:89a9:b0:277:f5d8:b77b with SMTP id 586e51a60fabf-2892c4a62edmr2658526fac.32.1729265539765; Fri, 18 Oct 2024 08:32:19 -0700 (PDT) Received: from [192.168.1.128] ([38.175.170.29]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-2892ad9f036sm493443fac.34.2024.10.18.08.32.17 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 18 Oct 2024 08:32:19 -0700 (PDT) Message-ID: <22d386cd-e62f-43f9-905e-2d0881781abe@linuxfoundation.org> Date: Fri, 18 Oct 2024 09:32:17 -0600 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH 4/4] selftests/mm: add self tests for guard page feature To: Lorenzo Stoakes Cc: Andrew Morton , Suren Baghdasaryan , "Liam R . Howlett" , Matthew Wilcox , Vlastimil Babka , "Paul E . McKenney" , Jann Horn , David Hildenbrand , linux-mm@kvack.org, linux-kernel@vger.kernel.org, Muchun Song , Richard Henderson , Ivan Kokshaysky , Matt Turner , Thomas Bogendoerfer , "James E . J . Bottomley" , Helge Deller , Chris Zankel , Max Filippov , Arnd Bergmann , linux-alpha@vger.kernel.org, linux-mips@vger.kernel.org, linux-parisc@vger.kernel.org, linux-arch@vger.kernel.org, Shuah Khan , Christian Brauner , linux-kselftest@vger.kernel.org, Sidhartha Kumar , Jeff Xu , Christoph Hellwig , Shuah Khan References: <8b1add3c511effb62d68183cae8a954d8339286c.1729196871.git.lorenzo.stoakes@oracle.com> <1d0bbc60-fda7-4c14-bf02-948bdbf8f029@linuxfoundation.org> Content-Language: en-US From: Shuah Khan In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: 1AED91A0012 X-Stat-Signature: we81jbrw6zgcc8ycx5g4exg8ttbmp8i4 X-Rspam-User: X-HE-Tag: 1729265526-273281 X-HE-Meta: U2FsdGVkX19IwBfPh8dXqrzWkac8rr/PDTlck4Vo+6ISCm5l3opFCdGGUGHTv0wjwTXpet7DB+KpTtGjYLPfXBzClbbTOtn4mJsuzd0DaKc5s2GSkbUfDQNUtazPCMwIS7PIL/58mMUdNbxpAmX9V4AT//DetfnUhqt6O+QNSYLMU2WLblAjAk9sW1JkW8ogURdtsEmtBGQIssYyB6ex5HA1l+t7twX3VF472sZAJoJ2olM5kMGRMSIsdM8U5mBfrzmE64uX0g9RdHywGzKSrjYjoL2PK1MGMWV+z8GDVaLF8R0DKhaqEFqbGI3eojPJEcy+QMrpODEXcZqQGmdIzLvYUbw8kbmP5z4ElM2lWB6kEaOSaAIxKqms4myZ6FCKGliXAgy2UTh+EeuoF0nvmPR9J+Oj0ukunprkaeZYTxWZk6MgW6tLDzvcdHOTihMSMRwyFKZH1yQGC6STSN6fUo2gY806cha95bBXo9fnEkAyVuXaTXdYWg2pSWOYieSxXK2rkPZSa8PY1fwVyufEC1wcCHQ/PA1zEGk10OOy+Ms5kLGUIc9FDDY0hUxx9A/bOEhoLqeQrfMghmexoT6mznN5JL+4TD1o/fi7S6/2pEvJyzxKbMY4Wtt0p9OOpTk5Hq6Am9WEgiAoYfjUpGSHJHE58Y4qLZ8G6inkOxKuvPreUBgZyAAX1+wkn6qSym69+gy1dSUZ5DVNfEr32uQ/iP8dfXXQodvJEiItH0byUJ7/obwim1BnpygjYi5I0K+iA/+uKhIC5SFZYr0YZ8OHvC6u9yZ9YX5qz9VQcHp7GLFoWne++CrznThVsqMEj1fgtV3ZguTVioA+vZrB/Txih7y+tlVp31VPmc3XcCYBxbrOCzCc13hjDHffAS0ChIi76eFDD1nf9uCtMePgkWUJqx2vJ9+jYYS7IQRP1b5P1zDvmCr1yCYe455eFaWnntABk2oe60rZTwoIvYGc0aW ouN4Jb8S 34KRv8+7TG+HzYD+HeqLbC2zKeiohSrhluOA3iX0DU4zalBMpu3rAaqO0ZBDKvBa5yrGwEp974+QFtWQwY4Yo+/m5iRg168CQUZTX6Dv+a33oX6AAn/pxpeCQM0C5bwLFDSl3vKuOl/KyQxZZqj/Y/nqHG4ZRr2BJRf6xWEUczKjdcU2Pn/9cCkEhAuMSHTUhcZWjAyhptHP3sh+XAl6v2jJV1oPwqBrizaRnnxGmdfYCSaDDh9cVCclmG0/y3VT5+cLoJiXSLGZt634HE2bLuOab4/OMaWrTiYCpiIvwdd2n8AtYuD2lIF1QihuPESW628NY/LEHDSeayIAcSFHlvJb9wCXCa1/KrpELavE959EIweJxE+uFx7Ph4KaQ/akEG0goRorfyUOuisyHFaZO+3Z4PC0LGeUj6cGJ 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: On 10/18/24 01:12, Lorenzo Stoakes wrote: > On Thu, Oct 17, 2024 at 03:24:49PM -0600, Shuah Khan wrote: >> On 10/17/24 14:42, Lorenzo Stoakes wrote: >>> Utilise the kselftest harmness to implement tests for the guard page >> >> Splleing NIT - harmness -> harness >> >>> implementation. >>> >>> We start by implement basic tests asserting that guard pages can be >> >> implmenting? By the way checkpatch will catch spelling stuuf. >> Please see comments about warnings below. > > Thanks. The majority of the checkpatch warnings are invalid so I missed > this. Will fix on respin. > >> >>> established (poisoned), cleared (remedied) and that touching poisoned pages >>> result in SIGSEGV. We also assert that, in remedying a range, non-poison >>> pages remain intact. >>> >>> We then examine different operations on regions containing poison markers >>> behave to ensure correct behaviour: >>> >>> * Operations over multiple VMAs operate as expected. >>> * Invoking MADV_GUARD_POISION / MADV_GUARD_REMEDY via process_madvise() in >>> batches works correctly. >>> * Ensuring that munmap() correctly tears down poison markers. >>> * Using mprotect() to adjust protection bits does not in any way override >>> or cause issues with poison markers. >>> * Ensuring that splitting and merging VMAs around poison markers causes no >>> issue - i.e. that a marker which 'belongs' to one VMA can function just >>> as well 'belonging' to another. >>> * Ensuring that madvise(..., MADV_DONTNEED) does not remove poison markers. >>> * Ensuring that mlock()'ing a range containing poison markers does not >>> cause issues. >>> * Ensuring that mremap() can move a poisoned range and retain poison >>> markers. >>> * Ensuring that mremap() can expand a poisoned range and retain poison >>> markers (perhaps moving the range). >>> * Ensuring that mremap() can shrink a poisoned range and retain poison >>> markers. >>> * Ensuring that forking a process correctly retains poison markers. >>> * Ensuring that forking a VMA with VM_WIPEONFORK set behaves sanely. >>> * Ensuring that lazyfree simply clears poison markers. >>> * Ensuring that userfaultfd can co-exist with guard pages. >>> * Ensuring that madvise(..., MADV_POPULATE_READ) and >>> madvise(..., MADV_POPULATE_WRITE) error out when encountering >>> poison markers. >>> * Ensuring that madvise(..., MADV_COLD) and madvise(..., MADV_PAGEOUT) do >>> not remove poison markers. >> >> Good summary of test. Does the test require root access? >> If so does it check and skip appropriately? > > Thanks and some do, in those cases we skip. > >> >>> >>> Signed-off-by: Lorenzo Stoakes >>> --- >>> tools/testing/selftests/mm/.gitignore | 1 + >>> tools/testing/selftests/mm/Makefile | 1 + >>> tools/testing/selftests/mm/guard-pages.c | 1168 ++++++++++++++++++++++ >>> 3 files changed, 1170 insertions(+) >>> create mode 100644 tools/testing/selftests/mm/guard-pages.c >>> >>> diff --git a/tools/testing/selftests/mm/.gitignore b/tools/testing/selftests/mm/.gitignore >>> index 689bbd520296..8f01f4da1c0d 100644 >>> --- a/tools/testing/selftests/mm/.gitignore >>> +++ b/tools/testing/selftests/mm/.gitignore >>> @@ -54,3 +54,4 @@ droppable >>> hugetlb_dio >>> pkey_sighandler_tests_32 >>> pkey_sighandler_tests_64 >>> +guard-pages >>> diff --git a/tools/testing/selftests/mm/Makefile b/tools/testing/selftests/mm/Makefile >>> index 02e1204971b0..15c734d6cfec 100644 >>> --- a/tools/testing/selftests/mm/Makefile >>> +++ b/tools/testing/selftests/mm/Makefile >>> @@ -79,6 +79,7 @@ TEST_GEN_FILES += hugetlb_fault_after_madv >>> TEST_GEN_FILES += hugetlb_madv_vs_map >>> TEST_GEN_FILES += hugetlb_dio >>> TEST_GEN_FILES += droppable >>> +TEST_GEN_FILES += guard-pages >>> ifneq ($(ARCH),arm64) >>> TEST_GEN_FILES += soft-dirty >>> diff --git a/tools/testing/selftests/mm/guard-pages.c b/tools/testing/selftests/mm/guard-pages.c >>> new file mode 100644 >>> index 000000000000..2ab0ff3ba5a0 >>> --- /dev/null >>> +++ b/tools/testing/selftests/mm/guard-pages.c >>> @@ -0,0 +1,1168 @@ >>> +// SPDX-License-Identifier: GPL-2.0-or-later >>> + >>> +#define _GNU_SOURCE >>> +#include "../kselftest_harness.h" >>> +#include >>> +#include >>> +#include >>> +#include >>> +#include >>> +#include >>> +#include >>> +#include >>> +#include >>> +#include >>> +#include >>> +#include >>> +#include >>> +#include >>> +#include >>> + >>> +/* These may not yet be available in the uAPI so define if not. */ >>> + >>> +#ifndef MADV_GUARD_POISON >>> +#define MADV_GUARD_POISON 102 >>> +#endif >>> + >>> +#ifndef MADV_GUARD_UNPOISON >>> +#define MADV_GUARD_UNPOISON 103 >>> +#endif >>> + >>> +volatile bool signal_jump_set; >> >> Can you add a comment about why volatile is needed. > > I'm not sure it's really necessary, it's completely standard to do this > with signal handling and is one of the exceptions to the 'volatile > considered harmful' rule. > >> By the way did you happen to run checkpatck on this. There are >> several instances where single statement blocks with braces {} >> >> I noticed a few and ran checkpatch on your patch. There are >> 45 warnings regarding codeing style. >> >> Please run checkpatch and clean them up so we can avoid followup >> checkpatch cleanup patches. > > No sorry I won't, checkpatch isn't infallible and series trying to 'clean > up' things that aren't issues will be a waste of everybody's time. > Sorry - this violates the coding styles and makes it hard to read. See process/coding-style.rst: Do not unnecessarily use braces where a single statement will do. .. code-block:: c if (condition) action(); and .. code-block:: c if (condition) do_this(); else do_that(); This does not apply if only one branch of a conditional statement is a single statement; in the latter case use braces in both branches: .. code-block:: c if (condition) { do_this(); do_that(); } else { otherwise(); } Also, use braces when a loop contains more than a single simple statement: .. code-block:: c while (condition) { if (test) do_something(); } thanks, -- Shuah