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 A4B82CA1006 for ; Fri, 30 Aug 2024 15:45:59 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 333036B0106; Fri, 30 Aug 2024 11:45:59 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 2B8AA6B0107; Fri, 30 Aug 2024 11:45:59 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 1338D6B0105; Fri, 30 Aug 2024 11:45:59 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id E46BA6B0101 for ; Fri, 30 Aug 2024 11:45:58 -0400 (EDT) Received: from smtpin25.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 6F966418B2 for ; Fri, 30 Aug 2024 15:45:58 +0000 (UTC) X-FDA: 82509337596.25.420010B Received: from mail-oo1-f52.google.com (mail-oo1-f52.google.com [209.85.161.52]) by imf25.hostedemail.com (Postfix) with ESMTP id D4C58A0047 for ; Fri, 30 Aug 2024 15:45:41 +0000 (UTC) Authentication-Results: imf25.hostedemail.com; dkim=pass header.d=chromium.org header.s=google header.b=YbPh+Emm; spf=pass (imf25.hostedemail.com: domain of jeffxu@chromium.org designates 209.85.161.52 as permitted sender) smtp.mailfrom=jeffxu@chromium.org; dmarc=pass (policy=none) header.from=chromium.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1725032651; 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=diHxpaObCuY/Na0aMWkJnZUQW0vAuk4Wy8/UKvM3WNM=; b=3tc226DjeAD0hC750KLUrQ9tb0FNIYmzYYux1bTp2Dahe+Bse/ZnPnclCYByjImJ7AR2VT 8qa9OB+tiyiIb1a1i0TTIbGDQohkKfKuMMRdH2fDmHcuRadvLQL50IFAXvWlV+wDwicZT8 2A7mQjy/LFhpXOFDz9cYFk3dbhMKevA= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1725032651; a=rsa-sha256; cv=none; b=kVdCm9K+jgFxQfw/4pMvloRhhYMzv0qPB29AVJ0+wfLmv2IMvtVDSwhUpDWVnHUUUMu0AK RioWdo/t6krW99LTvVDXyhMGTuYF6AznsMZPcVmhvKhpMyPZYLQVn757s9Hdi3RVamGppa xF4BJ8qQ7zPgp/QyJQ5fFrXIyimN6H4= ARC-Authentication-Results: i=1; imf25.hostedemail.com; dkim=pass header.d=chromium.org header.s=google header.b=YbPh+Emm; spf=pass (imf25.hostedemail.com: domain of jeffxu@chromium.org designates 209.85.161.52 as permitted sender) smtp.mailfrom=jeffxu@chromium.org; dmarc=pass (policy=none) header.from=chromium.org Received: by mail-oo1-f52.google.com with SMTP id 006d021491bc7-5d5e2de5d78so109700eaf.2 for ; Fri, 30 Aug 2024 08:45:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1725032740; x=1725637540; 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=diHxpaObCuY/Na0aMWkJnZUQW0vAuk4Wy8/UKvM3WNM=; b=YbPh+Emmvv1WvfBPdV1nI7Vl5+Gx8xt3qQpp8Ufd2AAKjqiAstLuNIZh9LEJCqxqPJ IBVfRnpFF9mgfX0PXkme/tpIQ+yBtGCVSSqOavda6eHeAK2zLdpkbqOWataqvGeq9XeC QHxN6VyRmJuTo6nN5kOeg6oT23PW0OMHXtTps= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1725032740; x=1725637540; 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=diHxpaObCuY/Na0aMWkJnZUQW0vAuk4Wy8/UKvM3WNM=; b=gipUeiSIcduzuMfPsDVBpKODQb8dY8KWDKECBJKEGak+NDzzuTTTpwtcY1jtLfuqE6 KTMf6sBuimQTI/W2swog1Nt93N34fxDQU96215/AUOjX7zk6byCEsvdWmrCLHQUHLZRs byGLpk7O6s8EolYz2sVHi0Cil2WuUV79qQU6/d1O/AbtUXZiD14KHZPBGrGSOGK0oVW9 oKuz2Bi/h/c0lJJLN6IOkGpDN0OmFj1cxdzkTwFzVSfqPjSyGTNiZsf2ZVpSjMaYoYBW t2VWyxqrUiRz8ISZe8rFInT6/MYM6+P/HbZd2aKJKm8/oEdSnytrC9oJqkA3Fu6HQHUJ qHyw== X-Forwarded-Encrypted: i=1; AJvYcCW52Z2KZuRm0Be1+5QqdugoASkKzSIYBQHNUx44e/RggJTcpVQZ+YwZLB5i+bAY6Nj9zpotmxmJkQ==@kvack.org X-Gm-Message-State: AOJu0YxhLOGuS9kIfpfAzScLXdUJnkcAYRJo5wVabRpK/JLzCJ2dpbvh jKt6w4cxPLAQTWazFPj6kjEttOFzndlWM065hJMbHZ9181jU2JZvLlH/ySk8DkSsI898Ep8bde/ SgK3rkNBUbL9P2wwDtJDlNb3CxrUhJsNHPcCv X-Google-Smtp-Source: AGHT+IETdqnffGl1wlDVPNZi2RdYF+H4YTFQcXLE/WIaSGCb3cOnhh+mmFpSSN+HbA/bklt1b8l0l6j8VLc29HW02Ts= X-Received: by 2002:a05:6871:153:b0:25e:c0b:82c5 with SMTP id 586e51a60fabf-277b0bb9021mr1368078fac.3.1725032740303; Fri, 30 Aug 2024 08:45:40 -0700 (PDT) MIME-Version: 1.0 References: <20240829214352.963001-1-jeffxu@chromium.org> <20240829214352.963001-2-jeffxu@chromium.org> In-Reply-To: From: Jeff Xu Date: Fri, 30 Aug 2024 08:45:28 -0700 Message-ID: Subject: Re: [PATCH v2 1/4] selftests/mm: mseal_test, add vma size check To: Pedro Falcato Cc: akpm@linux-foundation.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org, linux-hardening@vger.kernel.org, linux-kernel@vger.kernel.org, willy@infradead.org, lorenzo.stoakes@oracle.com, broonie@kernel.org, vbabka@suse.cz, Liam.Howlett@oracle.com, rientjes@google.com, keescook@chromium.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspam-User: X-Rspamd-Server: rspam04 X-Rspamd-Queue-Id: D4C58A0047 X-Stat-Signature: hdeitx3g5do61gp99gejt5tqqxpd96fm X-HE-Tag: 1725032741-822239 X-HE-Meta: U2FsdGVkX18mAQdm2mRR041eduuPL+qdjySV7e8R8DpCrkbn9jISvselg2d/j2NiO1RS+/jWqLT+dy6pq/doLROnCDUCQgZJ1ghO/MQOuG1M0O3npzb4MMdErd4GQUy31B/CaJF3SWsGC7UVmsK6fQHO8mqeinsPzpMwCJ+x2EJ1pZQI9l/IlNDRfTXb/Eq3/CikOP/FMdXoLOOkCneRTbP6nhyC4HGQ1IyQe0Tb5Mx94gbTw+7AH4ROekPinDnsjHJCOQXA1OvXO8jMDpfF6B3Jn1oqqqjqtUB55vyVyb5+qS+4ZciP8WS5frliy6onSsomuA/7rYpyuLf1E8FQB4m00sQgI9+6LtC5YhAp32YWMcAtdgNyKOlaSMvANrpziSn2Lr2fgiMDWLYeEeuZrZ5YJwTVgARh1EJZj+1NfnzWshQ72GjgSf98CroypD7tawhESS1Mta3BeLz+NaCuoIBLRMk+I8L7oyTaUC0iaT8MSO3XpHaefCjlWyaKZ/YIA9N6i60D/NAw9S18ts06BHMm7tUypYCAowzj86tJFqhPoLKjAUZA1mQXQbFN3VBX6xJ4ogmDwF8qIBzxvK7iUOjERgrCuul53hAT+8yAycyxXNrfht5PIvx3calXUw3pDXFI7Xa6hVQKA4jkRhKoEipoV7EEz0h4cyLr9Z6R23o12uG9pJeU2yEIMkbLM9R799wJlVP1+RZO08AxVSHPLVwdDCTq8ycDNcgvAkujDlz7KQVwAZwRKF9Em5HTdIFdN9PFmH34qR+2FlIV800af690GlD7U1xhF+kNuXoZYw74v2wwtDfdVQYdKxH81iAFDfu/HlOswow3hum004cAH8BJrdOqCL7/Bk7FPwENMXaY9JSWvVJArYrupDbQo/OTijr1Bxf5sCoNEcoYXWzRXEucoi95KLugH1kwzfOc9Lbe+UTKqPlyXAfB16N94MLnIgCZvaQ7oyp8cqor1wT vI2ertjP WoafpmMgXdBjvpEOCycTWf4ud+zpCftKVAw3Jkuap8ReZNYRedbbmjNBla7az5hekMJ9vTs3pWOwc7zXCmv9SBYP2dfz9RwINXD6r6PKK+6LMV5kQCobM6fNvM9PzSZOQZm/ZifzX2bdF41hQAsdbY1inxE4jg8IUa5QMsDvOJdsfne1UYiwFv3NRQhAlejm5dv5wVm6i0UZleeSgR5H9BY6yiGC43xtRl5Dy/tSO9ekNpW+i17KgszMdk10u6h+sqpX8VUdmrouC6RDzW+sxAG8Pri7b5LQd1I2twbjWHD1z+d4OdVx6m/Eo8qZacpWnE6otMedtemGsh99nNkn/OxmCLAeiFH1BmZ770D2evUAaRA0= 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: Hi Pedro On Fri, Aug 30, 2024 at 5:45=E2=80=AFAM Pedro Falcato wrote: > > On Thu, Aug 29, 2024 at 09:43:49PM GMT, jeffxu@chromium.org wrote: > > From: Jeff Xu > > > > Add check for vma size, prot bits and error return. > > > > Signed-off-by: Jeff Xu > > --- > > tools/testing/selftests/mm/mseal_test.c | 398 ++++++++++++++++++++---- > > 1 file changed, 332 insertions(+), 66 deletions(-) > > > > diff --git a/tools/testing/selftests/mm/mseal_test.c b/tools/testing/se= lftests/mm/mseal_test.c > > index e7991e5fdcf3..adc646cf576c 100644 > > --- a/tools/testing/selftests/mm/mseal_test.c > > +++ b/tools/testing/selftests/mm/mseal_test.c > > @@ -170,18 +170,31 @@ static void set_pkey(int pkey, unsigned long pkey= _value) > > static void setup_single_address(int size, void **ptrOut) > > { > > void *ptr; > > + unsigned long page_size =3D getpagesize(); > > > > - ptr =3D mmap(NULL, size, PROT_READ, MAP_ANONYMOUS | MAP_PRIVATE, = -1, 0); > > - *ptrOut =3D ptr; > > + *ptrOut =3D (void *)-1; > > + ptr =3D mmap(NULL, size + 2 * page_size, PROT_READ, MAP_ANONYMOUS= | MAP_PRIVATE, -1, 0); > > + if (ptr !=3D (void *) -1) { > > MAP_FAILED, not (void *) -1 > ok. > > + /* add 2 page at the beginning and end to avoid auto-merg= e of mapping */ > > + sys_mprotect(ptr, page_size, PROT_NONE); > > + sys_mprotect(ptr + size + page_size, page_size, PROT_NONE= ); > > + *ptrOut =3D ptr + page_size; > > + } > > } > > > > static void setup_single_address_rw(int size, void **ptrOut) > > { > > void *ptr; > > unsigned long mapflags =3D MAP_ANONYMOUS | MAP_PRIVATE; > > + unsigned long page_size =3D getpagesize(); > > > > - ptr =3D mmap(NULL, size, PROT_READ | PROT_WRITE, mapflags, -1, 0)= ; > > - *ptrOut =3D ptr; > > + *ptrOut =3D (void *)-1; > > + ptr =3D mmap(NULL, size + 2 * page_size, PROT_READ | PROT_WRITE, = mapflags, -1, 0); > > + if (ptr !=3D (void *) -1) { > > Same here. ok. > > + sys_mprotect(ptr, page_size, PROT_NONE); > > + sys_mprotect(ptr + size + page_size, page_size, PROT_NONE= ); > > + *ptrOut =3D ptr + page_size; > > + } > > } > > > > static int clean_single_address(void *ptr, int size) > > @@ -226,6 +239,21 @@ bool pkey_supported(void) > > return false; > > } > > > > +bool get_vma_size_supported(void) > > +{ > > + void *ptr; > > + unsigned long page_size =3D getpagesize(); > > + unsigned long size =3D 4 * page_size; > > + int prot; > > + > > + setup_single_address(size, &ptr); > > + size =3D get_vma_size(ptr, &prot); > > + if (size =3D=3D 4 * page_size && prot =3D=3D 0x4) > > + return true; > > + > > + return false; > > +} > > + > > static void test_seal_addseal(void) > > { > > int ret; > > @@ -419,11 +447,17 @@ static void test_seal_invalid_input(void) > > unsigned long size =3D 4 * page_size; > > int ret; > > > > - setup_single_address(8 * page_size, &ptr); > > + setup_single_address(9 * page_size, &ptr); > > FAIL_TEST_IF_FALSE(ptr !=3D (void *)-1); > > - ret =3D clean_single_address(ptr + 4 * page_size, 4 * page_size); > > + > > + ret =3D clean_single_address(ptr, page_size); > > FAIL_TEST_IF_FALSE(!ret); > > > > + ret =3D clean_single_address(ptr + 5 * page_size, 4 * page_size); > > + FAIL_TEST_IF_FALSE(!ret); > > + > > + ptr =3D ptr + page_size; > > + > > /* invalid flag */ > > ret =3D syscall(__NR_mseal, ptr, size, 0x20); > > FAIL_TEST_IF_FALSE(ret < 0); > > @@ -523,6 +557,7 @@ static void test_seal_mprotect(bool seal) > > unsigned long page_size =3D getpagesize(); > > unsigned long size =3D 4 * page_size; > > int ret; > > + int prot; > > > > setup_single_address(size, &ptr); > > FAIL_TEST_IF_FALSE(ptr !=3D (void *)-1); > > @@ -533,9 +568,14 @@ static void test_seal_mprotect(bool seal) > > } > > > > ret =3D sys_mprotect(ptr, size, PROT_READ | PROT_WRITE); > > - if (seal) > > + if (seal) { > > FAIL_TEST_IF_FALSE(ret < 0); > > - else > > + FAIL_TEST_IF_FALSE(errno =3D=3D EPERM); > > + > > + size =3D get_vma_size(ptr, &prot); > > + FAIL_TEST_IF_FALSE(size =3D=3D 4 * page_size); > > + FAIL_TEST_IF_FALSE(prot =3D=3D 0x4); > > + } else > > FAIL_TEST_IF_FALSE(!ret); > > > > REPORT_TEST_PASS(); > > @@ -547,6 +587,7 @@ static void test_seal_start_mprotect(bool seal) > > unsigned long page_size =3D getpagesize(); > > unsigned long size =3D 4 * page_size; > > int ret; > > + int prot; > > > > setup_single_address(size, &ptr); > > FAIL_TEST_IF_FALSE(ptr !=3D (void *)-1); > > @@ -558,9 +599,14 @@ static void test_seal_start_mprotect(bool seal) > > > > /* the first page is sealed. */ > > ret =3D sys_mprotect(ptr, page_size, PROT_READ | PROT_WRITE); > > - if (seal) > > + if (seal) { > > FAIL_TEST_IF_FALSE(ret < 0); > > - else > > + FAIL_TEST_IF_FALSE(errno =3D=3D EPERM); > > + > > + size =3D get_vma_size(ptr, &prot); > > + FAIL_TEST_IF_FALSE(size =3D=3D page_size); > > + FAIL_TEST_IF_FALSE(prot =3D=3D 0x4); > > + } else > > FAIL_TEST_IF_FALSE(!ret); > > > > /* pages after the first page is not sealed. */ > > @@ -577,6 +623,7 @@ static void test_seal_end_mprotect(bool seal) > > unsigned long page_size =3D getpagesize(); > > unsigned long size =3D 4 * page_size; > > int ret; > > + int prot; > > > > setup_single_address(size, &ptr); > > FAIL_TEST_IF_FALSE(ptr !=3D (void *)-1); > > @@ -593,9 +640,14 @@ static void test_seal_end_mprotect(bool seal) > > /* last 3 page are sealed */ > > ret =3D sys_mprotect(ptr + page_size, page_size * 3, > > PROT_READ | PROT_WRITE); > > - if (seal) > > + if (seal) { > > FAIL_TEST_IF_FALSE(ret < 0); > > - else > > + FAIL_TEST_IF_FALSE(errno =3D=3D EPERM); > > + > > + size =3D get_vma_size(ptr + page_size, &prot); > > + FAIL_TEST_IF_FALSE(size =3D=3D 3 * page_size); > > + FAIL_TEST_IF_FALSE(prot =3D=3D 0x4); > > + } else > > FAIL_TEST_IF_FALSE(!ret); > > > > REPORT_TEST_PASS(); > > @@ -607,6 +659,7 @@ static void test_seal_mprotect_unalign_len(bool sea= l) > > unsigned long page_size =3D getpagesize(); > > unsigned long size =3D 4 * page_size; > > int ret; > > + int prot; > > > > setup_single_address(size, &ptr); > > FAIL_TEST_IF_FALSE(ptr !=3D (void *)-1); > > @@ -618,9 +671,14 @@ static void test_seal_mprotect_unalign_len(bool se= al) > > > > /* 2 pages are sealed. */ > > ret =3D sys_mprotect(ptr, page_size * 2, PROT_READ | PROT_WRITE); > > - if (seal) > > + if (seal) { > > FAIL_TEST_IF_FALSE(ret < 0); > > - else > > + FAIL_TEST_IF_FALSE(errno =3D=3D EPERM); > > + > > + size =3D get_vma_size(ptr, &prot); > > + FAIL_TEST_IF_FALSE(size =3D=3D 2 * page_size); > > + FAIL_TEST_IF_FALSE(prot =3D=3D 0x4); > > + } else > > FAIL_TEST_IF_FALSE(!ret); > > > > ret =3D sys_mprotect(ptr + page_size * 2, page_size, > > @@ -636,6 +694,7 @@ static void test_seal_mprotect_unalign_len_variant_= 2(bool seal) > > unsigned long page_size =3D getpagesize(); > > unsigned long size =3D 4 * page_size; > > int ret; > > + int prot; > > > > setup_single_address(size, &ptr); > > FAIL_TEST_IF_FALSE(ptr !=3D (void *)-1); > > @@ -646,9 +705,14 @@ static void test_seal_mprotect_unalign_len_variant= _2(bool seal) > > > > /* 3 pages are sealed. */ > > ret =3D sys_mprotect(ptr, page_size * 3, PROT_READ | PROT_WRITE); > > - if (seal) > > + if (seal) { > > FAIL_TEST_IF_FALSE(ret < 0); > > - else > > + FAIL_TEST_IF_FALSE(errno =3D=3D EPERM); > > + > > + size =3D get_vma_size(ptr, &prot); > > + FAIL_TEST_IF_FALSE(size =3D=3D 3 * page_size); > > + FAIL_TEST_IF_FALSE(prot =3D=3D 0x4); > > + } else > > FAIL_TEST_IF_FALSE(!ret); > > > > ret =3D sys_mprotect(ptr + page_size * 3, page_size, > > @@ -664,6 +728,7 @@ static void test_seal_mprotect_two_vma(bool seal) > > unsigned long page_size =3D getpagesize(); > > unsigned long size =3D 4 * page_size; > > int ret; > > + int prot; > > > > setup_single_address(size, &ptr); > > FAIL_TEST_IF_FALSE(ptr !=3D (void *)-1); > > @@ -678,16 +743,26 @@ static void test_seal_mprotect_two_vma(bool seal) > > } > > > > ret =3D sys_mprotect(ptr, page_size * 2, PROT_READ | PROT_WRITE); > > - if (seal) > > + if (seal) { > > FAIL_TEST_IF_FALSE(ret < 0); > > - else > > + FAIL_TEST_IF_FALSE(errno =3D=3D EPERM); > > + > > + size =3D get_vma_size(ptr, &prot); > > + FAIL_TEST_IF_FALSE(size =3D=3D 2 * page_size); > > + FAIL_TEST_IF_FALSE(prot =3D=3D 0x6); > > + } else > > FAIL_TEST_IF_FALSE(!ret); > > > > ret =3D sys_mprotect(ptr + page_size * 2, page_size * 2, > > PROT_READ | PROT_WRITE); > > - if (seal) > > + if (seal) { > > FAIL_TEST_IF_FALSE(ret < 0); > > - else > > + FAIL_TEST_IF_FALSE(errno =3D=3D EPERM); > > + > > + size =3D get_vma_size(ptr + page_size * 2, &prot); > > + FAIL_TEST_IF_FALSE(size =3D=3D 2 * page_size); > > + FAIL_TEST_IF_FALSE(prot =3D=3D 0x4); > > + } else > > FAIL_TEST_IF_FALSE(!ret); > > > > REPORT_TEST_PASS(); > > @@ -699,6 +774,7 @@ static void test_seal_mprotect_two_vma_with_split(b= ool seal) > > unsigned long page_size =3D getpagesize(); > > unsigned long size =3D 4 * page_size; > > int ret; > > + int prot; > > > > setup_single_address(size, &ptr); > > FAIL_TEST_IF_FALSE(ptr !=3D (void *)-1); > > @@ -719,17 +795,27 @@ static void test_seal_mprotect_two_vma_with_split= (bool seal) > > > > /* the second page is sealed. */ > > ret =3D sys_mprotect(ptr + page_size, page_size, PROT_READ | PROT= _WRITE); > > - if (seal) > > + if (seal) { > > FAIL_TEST_IF_FALSE(ret < 0); > > - else > > + FAIL_TEST_IF_FALSE(errno =3D=3D EPERM); > > + > > + size =3D get_vma_size(ptr, &prot); > > + FAIL_TEST_IF_FALSE(size =3D=3D 1 * page_size); > > + FAIL_TEST_IF_FALSE(prot =3D=3D 0x6); > > + } else > > FAIL_TEST_IF_FALSE(!ret); > > > > /* the third page is sealed. */ > > ret =3D sys_mprotect(ptr + 2 * page_size, page_size, > > PROT_READ | PROT_WRITE); > > - if (seal) > > + if (seal) { > > FAIL_TEST_IF_FALSE(ret < 0); > > - else > > + FAIL_TEST_IF_FALSE(errno =3D=3D EPERM); > > + > > + size =3D get_vma_size(ptr + 2 * page_size, &prot); > > + FAIL_TEST_IF_FALSE(size =3D=3D 1 * page_size); > > + FAIL_TEST_IF_FALSE(prot =3D=3D 0x4); > > + } else > > FAIL_TEST_IF_FALSE(!ret); > > > > /* the fouth page is not sealed. */ > > @@ -746,6 +832,7 @@ static void test_seal_mprotect_partial_mprotect(boo= l seal) > > unsigned long page_size =3D getpagesize(); > > unsigned long size =3D 4 * page_size; > > int ret; > > + int prot; > > > > setup_single_address(size, &ptr); > > FAIL_TEST_IF_FALSE(ptr !=3D (void *)-1); > > @@ -758,9 +845,14 @@ static void test_seal_mprotect_partial_mprotect(bo= ol seal) > > > > /* mprotect first 2 page will fail, since the first page are seal= ed. */ > > ret =3D sys_mprotect(ptr, 2 * page_size, PROT_READ | PROT_WRITE); > > - if (seal) > > + if (seal) { > > FAIL_TEST_IF_FALSE(ret < 0); > > - else > > + FAIL_TEST_IF_FALSE(errno =3D=3D EPERM); > > + > > + size =3D get_vma_size(ptr, &prot); > > + FAIL_TEST_IF_FALSE(size =3D=3D 1 * page_size); > > + FAIL_TEST_IF_FALSE(prot =3D=3D 0x4); > > + } else > > FAIL_TEST_IF_FALSE(!ret); > > > > REPORT_TEST_PASS(); > > @@ -783,15 +875,15 @@ static void test_seal_mprotect_partial_mprotect_t= ail(bool seal) > > } > > > > ret =3D sys_mprotect(ptr, size, PROT_EXEC); > > - if (seal) > > + if (seal) { > > FAIL_TEST_IF_FALSE(ret < 0); > > - else > > - FAIL_TEST_IF_FALSE(!ret); > > + FAIL_TEST_IF_FALSE(errno =3D=3D EPERM); > > > > - if (seal) { > > - FAIL_TEST_IF_FALSE(get_vma_size(ptr + page_size, &prot) >= 0); > > + size =3D get_vma_size(ptr + page_size, &prot); > > + FAIL_TEST_IF_FALSE(size =3D=3D 1 * page_size); > > FAIL_TEST_IF_FALSE(prot =3D=3D 0x4); > > - } > > + } else > > + FAIL_TEST_IF_FALSE(!ret); > > > > REPORT_TEST_PASS(); > > } > > @@ -846,6 +938,7 @@ static void test_seal_mprotect_split(bool seal) > > unsigned long page_size =3D getpagesize(); > > unsigned long size =3D 4 * page_size; > > int ret; > > + int prot; > > > > setup_single_address(size, &ptr); > > FAIL_TEST_IF_FALSE(ptr !=3D (void *)-1); > > @@ -862,16 +955,34 @@ static void test_seal_mprotect_split(bool seal) > > > > /* mprotect is sealed. */ > > ret =3D sys_mprotect(ptr, 2 * page_size, PROT_READ); > > - if (seal) > > + if (seal) { > > FAIL_TEST_IF_FALSE(ret < 0); > > - else > > + FAIL_TEST_IF_FALSE(errno =3D=3D EPERM); > > + > > + size =3D get_vma_size(ptr, &prot); > > + FAIL_TEST_IF_FALSE(size =3D=3D 1 * page_size); > > + FAIL_TEST_IF_FALSE(prot =3D=3D 0x6); > > + > > + size =3D get_vma_size(ptr + page_size, &prot); > > + FAIL_TEST_IF_FALSE(size =3D=3D 3 * page_size); > > + FAIL_TEST_IF_FALSE(prot =3D=3D 0x4); > > + } else > > FAIL_TEST_IF_FALSE(!ret); > > > > > > ret =3D sys_mprotect(ptr + 2 * page_size, 2 * page_size, PROT_REA= D); > > - if (seal) > > + if (seal) { > > FAIL_TEST_IF_FALSE(ret < 0); > > - else > > + FAIL_TEST_IF_FALSE(errno =3D=3D EPERM); > > + > > + size =3D get_vma_size(ptr, &prot); > > + FAIL_TEST_IF_FALSE(size =3D=3D 1 * page_size); > > + FAIL_TEST_IF_FALSE(prot =3D=3D 0x6); > > + > > + size =3D get_vma_size(ptr + page_size, &prot); > > + FAIL_TEST_IF_FALSE(size =3D=3D 3 * page_size); > > + FAIL_TEST_IF_FALSE(prot =3D=3D 0x4); > > + } else > > FAIL_TEST_IF_FALSE(!ret); > > > > REPORT_TEST_PASS(); > > @@ -883,6 +994,7 @@ static void test_seal_mprotect_merge(bool seal) > > unsigned long page_size =3D getpagesize(); > > unsigned long size =3D 4 * page_size; > > int ret; > > + int prot; > > > > setup_single_address(size, &ptr); > > FAIL_TEST_IF_FALSE(ptr !=3D (void *)-1); > > @@ -899,9 +1011,18 @@ static void test_seal_mprotect_merge(bool seal) > > > > /* 2 pages are sealed. */ > > ret =3D sys_mprotect(ptr, 2 * page_size, PROT_READ); > > - if (seal) > > + if (seal) { > > FAIL_TEST_IF_FALSE(ret < 0); > > - else > > + FAIL_TEST_IF_FALSE(errno =3D=3D EPERM); > > + > > + size =3D get_vma_size(ptr, &prot); > > + FAIL_TEST_IF_FALSE(size =3D=3D 1 * page_size); > > + FAIL_TEST_IF_FALSE(prot =3D=3D 0x6); > > + > > + size =3D get_vma_size(ptr + page_size, &prot); > > + FAIL_TEST_IF_FALSE(size =3D=3D 1 * page_size); > > + FAIL_TEST_IF_FALSE(prot =3D=3D 0x4); > > + } else > > FAIL_TEST_IF_FALSE(!ret); > > > > /* last 2 pages are not sealed. */ > > @@ -917,6 +1038,7 @@ static void test_seal_munmap(bool seal) > > unsigned long page_size =3D getpagesize(); > > unsigned long size =3D 4 * page_size; > > int ret; > > + int prot; > > > > setup_single_address(size, &ptr); > > FAIL_TEST_IF_FALSE(ptr !=3D (void *)-1); > > @@ -928,9 +1050,14 @@ static void test_seal_munmap(bool seal) > > > > /* 4 pages are sealed. */ > > ret =3D sys_munmap(ptr, size); > > - if (seal) > > + if (seal) { > > FAIL_TEST_IF_FALSE(ret < 0); > > - else > > + FAIL_TEST_IF_FALSE(errno =3D=3D EPERM); > > + > > + size =3D get_vma_size(ptr, &prot); > > + FAIL_TEST_IF_FALSE(size =3D=3D 4 * page_size); > > + FAIL_TEST_IF_FALSE(prot =3D=3D 0x4); > > + } else > > FAIL_TEST_IF_FALSE(!ret); > > > > REPORT_TEST_PASS(); > > @@ -948,6 +1075,7 @@ static void test_seal_munmap_two_vma(bool seal) > > unsigned long page_size =3D getpagesize(); > > unsigned long size =3D 4 * page_size; > > int ret; > > + int prot; > > > > setup_single_address(size, &ptr); > > FAIL_TEST_IF_FALSE(ptr !=3D (void *)-1); > > @@ -962,15 +1090,33 @@ static void test_seal_munmap_two_vma(bool seal) > > } > > > > ret =3D sys_munmap(ptr, page_size * 2); > > - if (seal) > > + if (seal) { > > FAIL_TEST_IF_FALSE(ret < 0); > > - else > > + FAIL_TEST_IF_FALSE(errno =3D=3D EPERM); > > + > > + size =3D get_vma_size(ptr, &prot); > > + FAIL_TEST_IF_FALSE(size =3D=3D 2 * page_size); > > + FAIL_TEST_IF_FALSE(prot =3D=3D 0x6); > > + > > + size =3D get_vma_size(ptr + 2 * page_size, &prot); > > + FAIL_TEST_IF_FALSE(size =3D=3D 2 * page_size); > > + FAIL_TEST_IF_FALSE(prot =3D=3D 0x4); > > + } else > > FAIL_TEST_IF_FALSE(!ret); > > > > ret =3D sys_munmap(ptr + page_size, page_size * 2); > > - if (seal) > > + if (seal) { > > FAIL_TEST_IF_FALSE(ret < 0); > > - else > > + FAIL_TEST_IF_FALSE(errno =3D=3D EPERM); > > + > > + size =3D get_vma_size(ptr, &prot); > > + FAIL_TEST_IF_FALSE(size =3D=3D 2 * page_size); > > + FAIL_TEST_IF_FALSE(prot =3D=3D 0x6); > > + > > + size =3D get_vma_size(ptr + 2 * page_size, &prot); > > + FAIL_TEST_IF_FALSE(size =3D=3D 2 * page_size); > > + FAIL_TEST_IF_FALSE(prot =3D=3D 0x4); > > + } else > > FAIL_TEST_IF_FALSE(!ret); > > > > REPORT_TEST_PASS(); > > @@ -1018,33 +1164,75 @@ static void test_seal_munmap_partial_across_vma= s(bool seal) > > { > > void *ptr; > > unsigned long page_size =3D getpagesize(); > > - unsigned long size =3D 2 * page_size; > > + unsigned long size =3D 12 * page_size; > > int ret; > > int prot; > > > > - /* > > - * Check if a partial mseal (that results in two vmas) works corr= ectly. > > - * It might unmap the first, but it'll never unmap the second (ms= ealed) vma. > > - */ > > - > > setup_single_address(size, &ptr); > > FAIL_TEST_IF_FALSE(ptr !=3D (void *)-1); > > > > if (seal) { > > - ret =3D sys_mseal(ptr + page_size, page_size); > > + ret =3D sys_mseal(ptr + 4 * page_size, 4 * page_size); > > FAIL_TEST_IF_FALSE(!ret); > > } > > > > - ret =3D sys_munmap(ptr, size); > > - if (seal) > > + ret =3D sys_munmap(ptr, 12 * page_size); > > + if (seal) { > > FAIL_TEST_IF_FALSE(ret < 0); > > - else > > + FAIL_TEST_IF_FALSE(errno =3D=3D EPERM); > > + > > + size =3D get_vma_size(ptr, &prot); > > + FAIL_TEST_IF_FALSE(size =3D=3D 4 * page_size); > > + FAIL_TEST_IF_FALSE(prot =3D=3D 0x4); > > + > > + size =3D get_vma_size(ptr + 4 * page_size, &prot); > > + FAIL_TEST_IF_FALSE(size =3D=3D 4 * page_size); > > + FAIL_TEST_IF_FALSE(prot =3D=3D 0x4); > > + > > + size =3D get_vma_size(ptr + 8 * page_size, &prot); > > + FAIL_TEST_IF_FALSE(size =3D=3D 4 * page_size); > > + FAIL_TEST_IF_FALSE(prot =3D=3D 0x4); > > + } else > > FAIL_TEST_IF_FALSE(!ret); > > > > + > > + ret =3D sys_munmap(ptr, 6 * page_size); > > if (seal) { > > - FAIL_TEST_IF_FALSE(get_vma_size(ptr + page_size, &prot) >= 0); > > + FAIL_TEST_IF_FALSE(ret < 0); > > + FAIL_TEST_IF_FALSE(errno =3D=3D EPERM); > > + > > + size =3D get_vma_size(ptr, &prot); > > + FAIL_TEST_IF_FALSE(size =3D=3D 4 * page_size); > > + FAIL_TEST_IF_FALSE(prot =3D=3D 0x4); > > + > > + size =3D get_vma_size(ptr + 4 * page_size, &prot); > > + FAIL_TEST_IF_FALSE(size =3D=3D 4 * page_size); > > FAIL_TEST_IF_FALSE(prot =3D=3D 0x4); > > - } > > + > > + size =3D get_vma_size(ptr + 8 * page_size, &prot); > > + FAIL_TEST_IF_FALSE(size =3D=3D 4 * page_size); > > + FAIL_TEST_IF_FALSE(prot =3D=3D 0x4); > > + } else > > + FAIL_TEST_IF_FALSE(!ret); > > + > > + ret =3D sys_munmap(ptr + 6 * page_size, 6 * page_size); > > + if (seal) { > > + FAIL_TEST_IF_FALSE(ret < 0); > > + FAIL_TEST_IF_FALSE(errno =3D=3D EPERM); > > + > > + size =3D get_vma_size(ptr, &prot); > > + FAIL_TEST_IF_FALSE(size =3D=3D 4 * page_size); > > + FAIL_TEST_IF_FALSE(prot =3D=3D 0x4); > > + > > + size =3D get_vma_size(ptr + 4 * page_size, &prot); > > + FAIL_TEST_IF_FALSE(size =3D=3D 4 * page_size); > > + FAIL_TEST_IF_FALSE(prot =3D=3D 0x4); > > + > > + size =3D get_vma_size(ptr + 8 * page_size, &prot); > > + FAIL_TEST_IF_FALSE(size =3D=3D 4 * page_size); > > + FAIL_TEST_IF_FALSE(prot =3D=3D 0x4); > > + } else > > + FAIL_TEST_IF_FALSE(!ret); > > > > REPORT_TEST_PASS(); > > } > > @@ -1074,9 +1262,11 @@ static void test_munmap_start_freed(bool seal) > > ret =3D sys_munmap(ptr, size); > > if (seal) { > > FAIL_TEST_IF_FALSE(ret < 0); > > + FAIL_TEST_IF_FALSE(errno =3D=3D EPERM); > > > > size =3D get_vma_size(ptr + page_size, &prot); > > - FAIL_TEST_IF_FALSE(size =3D=3D page_size * 3); > > + FAIL_TEST_IF_FALSE(size =3D=3D 3 * page_size); > > + FAIL_TEST_IF_FALSE(prot =3D=3D 0x4); > > } else { > > /* note: this will be OK, even the first page is */ > > /* already unmapped. */ > > @@ -1095,6 +1285,7 @@ static void test_munmap_end_freed(bool seal) > > unsigned long page_size =3D getpagesize(); > > unsigned long size =3D 4 * page_size; > > int ret; > > + int prot; > > > > setup_single_address(size, &ptr); > > FAIL_TEST_IF_FALSE(ptr !=3D (void *)-1); > > @@ -1111,9 +1302,14 @@ static void test_munmap_end_freed(bool seal) > > > > /* unmap all pages. */ > > ret =3D sys_munmap(ptr, size); > > - if (seal) > > + if (seal) { > > FAIL_TEST_IF_FALSE(ret < 0); > > - else > > + FAIL_TEST_IF_FALSE(errno =3D=3D EPERM); > > + > > + size =3D get_vma_size(ptr, &prot); > > + FAIL_TEST_IF_FALSE(size =3D=3D 3 * page_size); > > + FAIL_TEST_IF_FALSE(prot =3D=3D 0x4); > > + } else > > FAIL_TEST_IF_FALSE(!ret); > > > > REPORT_TEST_PASS(); > > @@ -1144,12 +1340,15 @@ static void test_munmap_middle_freed(bool seal) > > ret =3D sys_munmap(ptr, size); > > if (seal) { > > FAIL_TEST_IF_FALSE(ret < 0); > > + FAIL_TEST_IF_FALSE(errno =3D=3D EPERM); > > > > size =3D get_vma_size(ptr, &prot); > > FAIL_TEST_IF_FALSE(size =3D=3D page_size); > > + FAIL_TEST_IF_FALSE(prot =3D=3D 0x4); > > > > size =3D get_vma_size(ptr + page_size * 3, &prot); > > FAIL_TEST_IF_FALSE(size =3D=3D page_size); > > + FAIL_TEST_IF_FALSE(prot =3D=3D 0x4); > > } else { > > FAIL_TEST_IF_FALSE(!ret); > > > > @@ -1170,6 +1369,7 @@ static void test_seal_mremap_shrink(bool seal) > > unsigned long size =3D 4 * page_size; > > int ret; > > void *ret2; > > + int prot; > > > > setup_single_address(size, &ptr); > > FAIL_TEST_IF_FALSE(ptr !=3D (void *)-1); > > @@ -1184,6 +1384,10 @@ static void test_seal_mremap_shrink(bool seal) > > if (seal) { > > FAIL_TEST_IF_FALSE(ret2 =3D=3D (void *) MAP_FAILED); > > FAIL_TEST_IF_FALSE(errno =3D=3D EPERM); > > + > > + size =3D get_vma_size(ptr, &prot); > > + FAIL_TEST_IF_FALSE(size =3D=3D 4 * page_size); > > + FAIL_TEST_IF_FALSE(prot =3D=3D 0x4); > > } else { > > FAIL_TEST_IF_FALSE(ret2 !=3D (void *) MAP_FAILED); > > > > @@ -1199,6 +1403,7 @@ static void test_seal_mremap_expand(bool seal) > > unsigned long size =3D 4 * page_size; > > int ret; > > void *ret2; > > + int prot; > > > > setup_single_address(size, &ptr); > > FAIL_TEST_IF_FALSE(ptr !=3D (void *)-1); > > @@ -1216,6 +1421,10 @@ static void test_seal_mremap_expand(bool seal) > > if (seal) { > > FAIL_TEST_IF_FALSE(ret2 =3D=3D MAP_FAILED); > > FAIL_TEST_IF_FALSE(errno =3D=3D EPERM); > > + > > + size =3D get_vma_size(ptr, &prot); > > + FAIL_TEST_IF_FALSE(size =3D=3D 2 * page_size); > > + FAIL_TEST_IF_FALSE(prot =3D=3D 0x4); > > } else { > > FAIL_TEST_IF_FALSE(ret2 =3D=3D ptr); > > > > @@ -1231,6 +1440,7 @@ static void test_seal_mremap_move(bool seal) > > unsigned long size =3D page_size; > > int ret; > > void *ret2; > > + int prot; > > > > setup_single_address(size, &ptr); > > FAIL_TEST_IF_FALSE(ptr !=3D (void *)-1); > > @@ -1249,10 +1459,12 @@ static void test_seal_mremap_move(bool seal) > > if (seal) { > > FAIL_TEST_IF_FALSE(ret2 =3D=3D MAP_FAILED); > > FAIL_TEST_IF_FALSE(errno =3D=3D EPERM); > > - } else { > > - FAIL_TEST_IF_FALSE(ret2 !=3D MAP_FAILED); > > > > - } > > + size =3D get_vma_size(ptr, &prot); > > + FAIL_TEST_IF_FALSE(size =3D=3D page_size); > > + FAIL_TEST_IF_FALSE(prot =3D=3D 0x4); > > + } else > > + FAIL_TEST_IF_FALSE(ret2 !=3D MAP_FAILED); > > > > REPORT_TEST_PASS(); > > } > > @@ -1264,6 +1476,7 @@ static void test_seal_mmap_overwrite_prot(bool se= al) > > unsigned long size =3D page_size; > > int ret; > > void *ret2; > > + int prot; > > > > setup_single_address(size, &ptr); > > FAIL_TEST_IF_FALSE(ptr !=3D (void *)-1); > > @@ -1279,6 +1492,10 @@ static void test_seal_mmap_overwrite_prot(bool s= eal) > > if (seal) { > > FAIL_TEST_IF_FALSE(ret2 =3D=3D MAP_FAILED); > > FAIL_TEST_IF_FALSE(errno =3D=3D EPERM); > > + > > + size =3D get_vma_size(ptr, &prot); > > + FAIL_TEST_IF_FALSE(size =3D=3D page_size); > > + FAIL_TEST_IF_FALSE(prot =3D=3D 0x4); > > } else > > FAIL_TEST_IF_FALSE(ret2 =3D=3D ptr); > > > > @@ -1292,6 +1509,7 @@ static void test_seal_mmap_expand(bool seal) > > unsigned long size =3D 12 * page_size; > > int ret; > > void *ret2; > > + int prot; > > > > setup_single_address(size, &ptr); > > FAIL_TEST_IF_FALSE(ptr !=3D (void *)-1); > > @@ -1310,6 +1528,10 @@ static void test_seal_mmap_expand(bool seal) > > if (seal) { > > FAIL_TEST_IF_FALSE(ret2 =3D=3D MAP_FAILED); > > FAIL_TEST_IF_FALSE(errno =3D=3D EPERM); > > + > > + size =3D get_vma_size(ptr, &prot); > > + FAIL_TEST_IF_FALSE(size =3D=3D 8 * page_size); > > + FAIL_TEST_IF_FALSE(prot =3D=3D 0x4); > > } else > > FAIL_TEST_IF_FALSE(ret2 =3D=3D ptr); > > > > @@ -1323,6 +1545,7 @@ static void test_seal_mmap_shrink(bool seal) > > unsigned long size =3D 12 * page_size; > > int ret; > > void *ret2; > > + int prot; > > > > setup_single_address(size, &ptr); > > FAIL_TEST_IF_FALSE(ptr !=3D (void *)-1); > > @@ -1338,6 +1561,10 @@ static void test_seal_mmap_shrink(bool seal) > > if (seal) { > > FAIL_TEST_IF_FALSE(ret2 =3D=3D MAP_FAILED); > > FAIL_TEST_IF_FALSE(errno =3D=3D EPERM); > > + > > + size =3D get_vma_size(ptr, &prot); > > + FAIL_TEST_IF_FALSE(size =3D=3D 12 * page_size); > > + FAIL_TEST_IF_FALSE(prot =3D=3D 0x4); > > } else > > FAIL_TEST_IF_FALSE(ret2 =3D=3D ptr); > > > > @@ -1352,6 +1579,7 @@ static void test_seal_mremap_shrink_fixed(bool se= al) > > unsigned long size =3D 4 * page_size; > > int ret; > > void *ret2; > > + int prot; > > > > setup_single_address(size, &ptr); > > FAIL_TEST_IF_FALSE(ptr !=3D (void *)-1); > > @@ -1369,6 +1597,10 @@ static void test_seal_mremap_shrink_fixed(bool s= eal) > > if (seal) { > > FAIL_TEST_IF_FALSE(ret2 =3D=3D MAP_FAILED); > > FAIL_TEST_IF_FALSE(errno =3D=3D EPERM); > > + > > + size =3D get_vma_size(ptr, &prot); > > + FAIL_TEST_IF_FALSE(size =3D=3D 4 * page_size); > > + FAIL_TEST_IF_FALSE(prot =3D=3D 0x4); > > } else > > FAIL_TEST_IF_FALSE(ret2 =3D=3D newAddr); > > > > @@ -1383,6 +1615,7 @@ static void test_seal_mremap_expand_fixed(bool se= al) > > unsigned long size =3D 4 * page_size; > > int ret; > > void *ret2; > > + int prot; > > > > setup_single_address(page_size, &ptr); > > FAIL_TEST_IF_FALSE(ptr !=3D (void *)-1); > > @@ -1400,6 +1633,10 @@ static void test_seal_mremap_expand_fixed(bool s= eal) > > if (seal) { > > FAIL_TEST_IF_FALSE(ret2 =3D=3D MAP_FAILED); > > FAIL_TEST_IF_FALSE(errno =3D=3D EPERM); > > + > > + size =3D get_vma_size(newAddr, &prot); > > + FAIL_TEST_IF_FALSE(size =3D=3D 4 * page_size); > > + FAIL_TEST_IF_FALSE(prot =3D=3D 0x4); > > } else > > FAIL_TEST_IF_FALSE(ret2 =3D=3D newAddr); > > > > @@ -1414,6 +1651,7 @@ static void test_seal_mremap_move_fixed(bool seal= ) > > unsigned long size =3D 4 * page_size; > > int ret; > > void *ret2; > > + int prot; > > > > setup_single_address(size, &ptr); > > FAIL_TEST_IF_FALSE(ptr !=3D (void *)-1); > > @@ -1430,6 +1668,10 @@ static void test_seal_mremap_move_fixed(bool sea= l) > > if (seal) { > > FAIL_TEST_IF_FALSE(ret2 =3D=3D MAP_FAILED); > > FAIL_TEST_IF_FALSE(errno =3D=3D EPERM); > > + > > + size =3D get_vma_size(newAddr, &prot); > > + FAIL_TEST_IF_FALSE(size =3D=3D 4 * page_size); > > + FAIL_TEST_IF_FALSE(prot =3D=3D 0x4); > > } else > > FAIL_TEST_IF_FALSE(ret2 =3D=3D newAddr); > > > > @@ -1443,6 +1685,7 @@ static void test_seal_mremap_move_fixed_zero(bool= seal) > > unsigned long size =3D 4 * page_size; > > int ret; > > void *ret2; > > + int prot; > > > > setup_single_address(size, &ptr); > > FAIL_TEST_IF_FALSE(ptr !=3D (void *)-1); > > @@ -1460,9 +1703,12 @@ static void test_seal_mremap_move_fixed_zero(boo= l seal) > > if (seal) { > > FAIL_TEST_IF_FALSE(ret2 =3D=3D MAP_FAILED); > > FAIL_TEST_IF_FALSE(errno =3D=3D EPERM); > > - } else { > > + > > + size =3D get_vma_size(ptr, &prot); > > + FAIL_TEST_IF_FALSE(size =3D=3D 4 * page_size); > > + FAIL_TEST_IF_FALSE(prot =3D=3D 0x4); > > + } else > > FAIL_TEST_IF_FALSE(ret2 =3D=3D 0); > > - } > > > > REPORT_TEST_PASS(); > > } > > @@ -1474,6 +1720,7 @@ static void test_seal_mremap_move_dontunmap(bool = seal) > > unsigned long size =3D 4 * page_size; > > int ret; > > void *ret2; > > + int prot; > > > > setup_single_address(size, &ptr); > > FAIL_TEST_IF_FALSE(ptr !=3D (void *)-1); > > @@ -1488,6 +1735,10 @@ static void test_seal_mremap_move_dontunmap(bool= seal) > > if (seal) { > > FAIL_TEST_IF_FALSE(ret2 =3D=3D MAP_FAILED); > > FAIL_TEST_IF_FALSE(errno =3D=3D EPERM); > > + > > + size =3D get_vma_size(ptr, &prot); > > + FAIL_TEST_IF_FALSE(size =3D=3D 4 * page_size); > > + FAIL_TEST_IF_FALSE(prot =3D=3D 0x4); > > } else { > > /* kernel will allocate a new address */ > > FAIL_TEST_IF_FALSE(ret2 !=3D MAP_FAILED); > > @@ -1503,6 +1754,7 @@ static void test_seal_mremap_move_dontunmap_anyad= dr(bool seal) > > unsigned long size =3D 4 * page_size; > > int ret; > > void *ret2; > > + int prot; > > > > setup_single_address(size, &ptr); > > FAIL_TEST_IF_FALSE(ptr !=3D (void *)-1); > > @@ -1529,6 +1781,10 @@ static void test_seal_mremap_move_dontunmap_anya= ddr(bool seal) > > if (seal) { > > FAIL_TEST_IF_FALSE(ret2 =3D=3D MAP_FAILED); > > FAIL_TEST_IF_FALSE(errno =3D=3D EPERM); > > + > > + size =3D get_vma_size(ptr, &prot); > > + FAIL_TEST_IF_FALSE(size =3D=3D 4 * page_size); > > + FAIL_TEST_IF_FALSE(prot =3D=3D 0x4); > > } else { > > /* remap success and return ptr2 */ > > FAIL_TEST_IF_FALSE(ret2 =3D=3D ptr2); > > @@ -1690,9 +1946,10 @@ static void test_seal_discard_ro_anon_on_pkey(bo= ol seal) > > /* sealing will take effect if PKRU deny write. */ > > set_pkey(pkey, PKEY_DISABLE_WRITE); > > ret =3D sys_madvise(ptr, size, MADV_DONTNEED); > > - if (seal) > > + if (seal) { > > FAIL_TEST_IF_FALSE(ret < 0); > > - else > > + FAIL_TEST_IF_FALSE(errno =3D=3D EPERM); > > + } else > > FAIL_TEST_IF_FALSE(!ret); > > > > /* base seal still apply. */ > > FWIW I can't review any of the above. It's still a hard to review patch w= ith a bunch of unrelated changes > including VMA size, random errno checks, random vma size checks, etc. > The EPERM is the standard error code for modifying the sealed memory. The vma size and prot is to verify the sealed memory isn't changed after modifying the sealed memory. Those are all "must-check" parts of verifying the sealing. Now, previously with out-of-loop checks, there is no need to check any of those because once EPERM is returned, nothing will be modified. With in-loop change, this becomes necessary. I do not think it is reasonable to split the case further, i.e. go to the exact same scenario multiple times to check different attributes of sealing. Thanks -Jeff > Maybe break this down in separate patches. > > > @@ -1876,6 +2133,15 @@ int main(int argc, char **argv) > > if (!pkey_supported()) > > ksft_print_msg("PKEY not supported\n"); > > > > + /* > > + * Possible reasons: > > + * - unable to read /proc/pid/maps (unlikely) > > + * - parsing error when reading /proc/pid/maps,e.g. len is not ex= pected. > > + * Is this "TOPDOWN" mapping or format change in /proc/pid/maps= ? > > Why do we care? I don't think running selftests without a procfs mount is= supported in any way... > Format won't change. > > -- > Pedro