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 D3A5AC52D7C for ; Wed, 21 Aug 2024 16:27:29 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 462756B0082; Wed, 21 Aug 2024 12:27:29 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 412556B00A1; Wed, 21 Aug 2024 12:27:29 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 2B31E6B00A0; Wed, 21 Aug 2024 12:27:29 -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 0D3156B0149 for ; Wed, 21 Aug 2024 12:27:29 -0400 (EDT) Received: from smtpin13.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 84F91A7AC8 for ; Wed, 21 Aug 2024 16:27:28 +0000 (UTC) X-FDA: 82476782976.13.538A7EA Received: from mail-oa1-f54.google.com (mail-oa1-f54.google.com [209.85.160.54]) by imf12.hostedemail.com (Postfix) with ESMTP id A420840005 for ; Wed, 21 Aug 2024 16:27:26 +0000 (UTC) Authentication-Results: imf12.hostedemail.com; dkim=pass header.d=chromium.org header.s=google header.b=bmqVVjNi; dmarc=pass (policy=none) header.from=chromium.org; spf=pass (imf12.hostedemail.com: domain of jeffxu@chromium.org designates 209.85.160.54 as permitted sender) smtp.mailfrom=jeffxu@chromium.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1724257587; a=rsa-sha256; cv=none; b=ltBAYhCBX1/wGRVBSqxw6+BXfzol6cMDXekt173GqBh2EIV0qrc5cm950kNne2bhtghI73 yRshCoRdbeOABBtyVasAZlaZgkgEUiMpHjxoTHjXNSjllCS7C550ZQ7SOG9SdG3nPCnF9J Fq1UuXySIkQrHTrfCI52/dzfrMwaYVU= ARC-Authentication-Results: i=1; imf12.hostedemail.com; dkim=pass header.d=chromium.org header.s=google header.b=bmqVVjNi; dmarc=pass (policy=none) header.from=chromium.org; spf=pass (imf12.hostedemail.com: domain of jeffxu@chromium.org designates 209.85.160.54 as permitted sender) smtp.mailfrom=jeffxu@chromium.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1724257587; 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=Si3f0cgXJ9GhZQgrHEXWJqwMRCLXgXh7BKkzSMYJXtE=; b=Ol8VyDjAmY7lodsEc02k9fVHliB6upY+p4EhSnWf3vZKepnOt0oTDbKId3yrtfCTMOdoj7 CEBDyLprzs13Y/xckxz7033I9mxNGOX+sAH36qTqVvYNzMr2j662IiIvwuzjvwUya2Tpgr P5bHKLB91aTdCZaJ+1YqrMxM5kNpEgo= Received: by mail-oa1-f54.google.com with SMTP id 586e51a60fabf-26456710cfdso857140fac.0 for ; Wed, 21 Aug 2024 09:27:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1724257645; x=1724862445; darn=kvack.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=Si3f0cgXJ9GhZQgrHEXWJqwMRCLXgXh7BKkzSMYJXtE=; b=bmqVVjNiPcLkgBn1JAxF6G8FSZTJOcrAnuIesCRRmTuk5lWsocGr/dJ/i3CLxzMmy4 amKHiGoaAtAwf4MlmbfEcxFKeY1F2/u5ZqJOi1/3hNbp1kpIUGh3ZMcSZxI/TLMy8H6B dPs2Bx9clyuIcFZO8snb/5UZ1KTss7KvPI2Vg= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1724257645; x=1724862445; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Si3f0cgXJ9GhZQgrHEXWJqwMRCLXgXh7BKkzSMYJXtE=; b=vJ7a+J0uQP7D8vpppuKOZO0hEJS+USGgK3EG/z4u1Dx6y68UpsyLGD36Oh8oHRo9CG 0VvZWWmKJYd1BG4+1grmOouz8SQiBXgLbHYhR0buTZcxB83s4HkzU0tq0s3UM8qbi3av +wle9ElCLTC9kmFeJq9kwlxYoZMHE31aKLNPbbSlMQeoKST2UNOtR+TSt8jevXFg/U4r 6cqRHjvtkPuJlvXzcHWegLBuPe19To6aPT/MLlx9GVs4Otgfbrne7Vzl/TGtCM7DGHBm 6JRcRWPsgndAfidUsqMi1i2QRpQF2qR122cepL4Lar/4Bbty3CwroKalq7Ol+IIZaX+y PLAg== X-Forwarded-Encrypted: i=1; AJvYcCV6HntD/i7CFia/pqH2WNIqLOMCw6YSz1tM32uJokqEijjfssHm9QPopiQEPLC49dzdYZrTgJxMmg==@kvack.org X-Gm-Message-State: AOJu0Yw0dtEUaO383WpGBLgm/NyHBby8QpRpP0OImGaHBmUTdQUa2E/O eam5SDmZURuhuOZNq9EGT05PXTZ21hqF0GHcV+6GpGYq+zV8VjaUod3GuM9s9e051bTP3CEP+AG LCNPAGqG9lNnBUESOeyqBovlRdSS+jl5TUJEc X-Google-Smtp-Source: AGHT+IF9LYNubb8DZ72K7h88tUTIb0v91ADOGuhtngf8RP61y4Nf6wvMOrvvCOwowYLDE697/Ka6vKadkTLmkDYLRA0= X-Received: by 2002:a05:6870:818f:b0:26f:df8d:fc13 with SMTP id 586e51a60fabf-2737eeb7326mr1734080fac.2.1724257645346; Wed, 21 Aug 2024 09:27:25 -0700 (PDT) MIME-Version: 1.0 References: <20240817-mseal-depessimize-v3-0-d8d2e037df30@gmail.com> <20240817-mseal-depessimize-v3-7-d8d2e037df30@gmail.com> In-Reply-To: From: Jeff Xu Date: Wed, 21 Aug 2024 09:27:12 -0700 Message-ID: Subject: Re: [PATCH v3 7/7] selftests/mm: add more mseal traversal tests To: Pedro Falcato Cc: Andrew Morton , "Liam R. Howlett" , Vlastimil Babka , Lorenzo Stoakes , Shuah Khan , linux-mm@kvack.org, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, oliver.sang@intel.com, torvalds@linux-foundation.org, Michael Ellerman , Kees Cook Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspamd-Queue-Id: A420840005 X-Rspam-User: X-Rspamd-Server: rspam05 X-Stat-Signature: x4rrf19hna9g9utomgdiz4muhm3fc89j X-HE-Tag: 1724257646-484901 X-HE-Meta: U2FsdGVkX19OchykVYdsg5VV7CjbBMu5JDmQRb4HW49ALnrs1AAWm36kpRP6xmgo7EC7kXV54IsYasraodvHYLJC0hOKdvMn7mUQHnxZdxEe57qwZzaLGx4y1Weh8oi7aT8FOHCKkYKfDa7UgCKPN+FwzcvKdp1HXHV0IWpEcRxPheZn7Hu/R0YBjQeRW6Dtlyc2SWamRtIxGns9NPUvarblgb+L++jurpH5UM+kSEOPkNOfqSit1EYfSa42OgijdhgeFG5bnZq8XSzhLpkYmB/Rf3TRzrF0mWSFDJ64Ho8Q1yxccH+mBXiTa6BYxkVKjM421Q0T1msGCXUtZWDpzSFgVt9kOe82r7MRBxt5F1fKQsV2N6BWCc10g4FeCJbTiFFFmHV6ijzh3yOW9NA7jmxhDcB30v1o83QNg5mXZLgceLqUILouS0clyqijJ72PjtPAuLGNLhgfkxKan9mnBT/1TanQ10OXUdoeRVkRASAasJSTXGFDeId9LDLbVXFIU6+lOgNx4jjas0pXWtEouMCP4uZAd46I+ahpZkjTZ6wlSmndANSsNExwXP/LnJkdoKZo1Oq5KenzlsquV3Zd/ovQuHXDXgyAwKqNGPON1UKdJ71o2zp2c/1KYS1icuu3fRNG8isil7aJoX3MiTjJWzmSb7tI2DQh+SG4uzOibYNQBt6RUxQzY3A+f6VaumaZevgHVcHAyN7SKZYQ4C+ASC1E/idvo4KqEFZpR4MBsty/T4st9s0holmW6s2x7sLYkeRGYab6Le10CaQe8fuGdOGujQKL/kXP7iVzrew3n6QPUKhvdwvGTksBb2+KiRi5CepX8nlrPsKPkRJ6MbIqpB7gzjlYPC4KoVQxkx7BFQRRfm3F5M4/rVU8NXCGINv2ErwKSix3MpHVk8oMoKPLAHEljtJAfsnXdqCbFu0O+qMMr6jGTj+bIMGc9ZE1l6KD7oT8CoBqMs5U2xO7ovk rLUP1Fgg oMrp8T8F9u59aXO04pKHeRZaC42t1mQXULsHOnCpHx1v5b2+pu7xwzs8AKVGGNa4ZPi89QXqSULoDHpLNOlONJ1Xy4DoC1AI59haLon11nzCOXXFmXUHleTDOQVIZ/o3sVAptBhlxM3rneb3L2vOZC7M8DXWyxj8JK2BKwvU2XjahTx8hcSZMWlkKRuLB23r70Mt7bX8ryErNJMiawTCa7yZR++uc1KjYV8AgPvC9BPB8TyRYaMDY4Wmp49c6Y7hyIpzLUMsibyQ6Dt8klpl9DK3GRvd3lx8+L88GDsEwxH3bcGG3q2/9gFEbk/gKiKbyGpWk0WXMlD+kD4w= 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 Wed, Aug 21, 2024 at 9:20=E2=80=AFAM Pedro Falcato wrote: > > On Wed, Aug 21, 2024 at 4:56=E2=80=AFPM Jeff Xu wro= te: > > > > Hi Pedro > > > > On Fri, Aug 16, 2024 at 5:18=E2=80=AFPM Pedro Falcato wrote: > > > > > > Add more mseal traversal tests across VMAs, where we could possibly > > > screw up sealing checks. These test more across-vma traversal for > > > mprotect, munmap and madvise. Particularly, we test for the case wher= e a > > > regular VMA is followed by a sealed VMA. > > > > > > Signed-off-by: Pedro Falcato > > > --- > > > tools/testing/selftests/mm/mseal_test.c | 111 ++++++++++++++++++++++= +++++++++- > > > 1 file changed, 110 insertions(+), 1 deletion(-) > > > > > > diff --git a/tools/testing/selftests/mm/mseal_test.c b/tools/testing/= selftests/mm/mseal_test.c > > > index 259bef4945e9..0d4d40fb0f88 100644 > > > --- a/tools/testing/selftests/mm/mseal_test.c > > > +++ b/tools/testing/selftests/mm/mseal_test.c > > > @@ -766,6 +766,42 @@ static void test_seal_mprotect_partial_mprotect(= bool seal) > > > REPORT_TEST_PASS(); > > > } > > > > > > +static void test_seal_mprotect_partial_mprotect_tail(bool seal) > > > +{ > > > + void *ptr; > > > + unsigned long page_size =3D getpagesize(); > > > + unsigned long size =3D 2 * page_size; > > > + int ret; > > > + int prot; > > > + > > > + /* > > > + * Check if a partial mseal (that results in two vmas) works = correctly. > > > + * It might mprotect the first, but it'll never touch the sec= ond (msealed) vma. > > > + */ > > > + > > > + setup_single_address(size, &ptr); > > > + FAIL_TEST_IF_FALSE(ptr !=3D (void *)-1); > > > + > > > + if (seal) { > > > + ret =3D sys_mseal(ptr + page_size, size); > > you are allocating 2 pages , and I assume you are sealing the second > > page, so the size should be page_size. > > ret =3D sys_mseal(ptr + page_size, page_size); > > Yes, good catch, it appears to be harmless but ofc down to straight luck. > I'll send a fixup for this and the other mistake down there. > > > > > > + FAIL_TEST_IF_FALSE(!ret); > > > + } > > > + > > > + ret =3D sys_mprotect(ptr, size, PROT_EXEC); > > > + if (seal) > > > + FAIL_TEST_IF_FALSE(ret < 0); > > > + else > > > + FAIL_TEST_IF_FALSE(!ret); > > > + > > > + if (seal) { > > > + FAIL_TEST_IF_FALSE(get_vma_size(ptr + page_size, &pro= t) > 0); > > > + FAIL_TEST_IF_FALSE(prot =3D=3D 0x4); > > To test partial mprotect, the test needs to add the check for the > > first page to be changed, Also to avoid the merge, a PROT_NONE page > > can to be added in front. > > No, I'm leaving partial mprotect to be undefined. It doesn't make > sense to constraint ourselves, since POSIX wording is already loose. > > > > > > + } > > > + > > > + REPORT_TEST_PASS(); > > > +} > > > + > > > + > > > static void test_seal_mprotect_two_vma_with_gap(bool seal) > > > { > > > void *ptr; > > > @@ -983,6 +1019,41 @@ static void test_seal_munmap_vma_with_gap(bool = seal) > > > REPORT_TEST_PASS(); > > > } > > > > > > +static void test_seal_munmap_partial_across_vmas(bool seal) > > > +{ > > > + void *ptr; > > > + unsigned long page_size =3D getpagesize(); > > > + unsigned long size =3D 2 * page_size; > > > + int ret; > > > + int prot; > > > + > > > + /* > > > + * Check if a partial mseal (that results in two vmas) works = correctly. > > > + * It might unmap the first, but it'll never unmap the second= (msealed) vma. > > > + */ > > > + > > > + setup_single_address(size, &ptr); > > > + FAIL_TEST_IF_FALSE(ptr !=3D (void *)-1); > > > + > > > + if (seal) { > > > + ret =3D sys_mseal(ptr + page_size, size); > > ret =3D sys_mseal(ptr + page_size, page_size); > > > > > + FAIL_TEST_IF_FALSE(!ret); > > > + } > > > + > > > + ret =3D sys_munmap(ptr, size); > > > + if (seal) > > > + FAIL_TEST_IF_FALSE(ret < 0); > > > + else > > > + FAIL_TEST_IF_FALSE(!ret); > > > + > > > + if (seal) { > > > + FAIL_TEST_IF_FALSE(get_vma_size(ptr + page_size, &pro= t) > 0); > > > + FAIL_TEST_IF_FALSE(prot =3D=3D 0x4); > > To test partial unmap, the test needs to add the check for the first > > page to be freed, Also to avoid the merge, a PROT_NONE page needs to > > be in front. > > I'm not testing partial unmap. Partial unmap does not happen. I have > told you this before. > ok. Then this test should be as below ? (need to add PROT_NONE page before and after) size =3D get_vma_size(ptr, &prot); FAIL_TEST_IF_FALSE(size =3D=3D 2 * page_size); FAIL_TEST_IF_FALSE(prot=3D=3D0x4) > > > > The test_seal_munmap_partial_across_vmas shows the behavior > > difference with in-loop approach and out-loop approach. Previously, > > both VMAs will not be freed, now the first VMA will be freed, and the > > second VMA (sealed) won't. > > > > This brings to the line you previously mentioned: [1] and I quote: > > "munmap is atomic and always has been. It's required by POSIX." > > This is still true, the comment was a copy-and-paste mindslip. Please > read the email thread. It has been fixed up by Andrew. > Which thread/patch by Andrew ? Could you please send it to me ? (I might missed that) > -- > Pedro