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 10EA5D2F7E1 for ; Thu, 17 Oct 2024 02:38:51 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 71D426B007B; Wed, 16 Oct 2024 22:38:50 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 6CD606B0082; Wed, 16 Oct 2024 22:38:50 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 595046B0083; Wed, 16 Oct 2024 22:38:50 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 3A7416B007B for ; Wed, 16 Oct 2024 22:38:50 -0400 (EDT) Received: from smtpin29.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id 9A3C8C0D08 for ; Thu, 17 Oct 2024 02:38:38 +0000 (UTC) X-FDA: 82681536294.29.4746BC6 Received: from mail-ed1-f43.google.com (mail-ed1-f43.google.com [209.85.208.43]) by imf13.hostedemail.com (Postfix) with ESMTP id 5EFEF2000E for ; Thu, 17 Oct 2024 02:38:38 +0000 (UTC) Authentication-Results: imf13.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=ioac8SQ8; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf13.hostedemail.com: domain of jeffxu@google.com designates 209.85.208.43 as permitted sender) smtp.mailfrom=jeffxu@google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1729132610; a=rsa-sha256; cv=none; b=jNe137azPnB6bNIye2grCsa4F2zS9Eq8HaLSgnXuWbgSeW0tYlGRGaBJ+Z/JHAi+nS/iJy Zfs7DL7YLP9L5HMt9YDhKGUMq0hnToaSPTwRXDleOtTY9WXlCRVYGKvq509T62ydjjpYD3 mnXZKFvuZLYyDddD8/JGrXOmOLV1zsc= ARC-Authentication-Results: i=1; imf13.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=ioac8SQ8; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf13.hostedemail.com: domain of jeffxu@google.com designates 209.85.208.43 as permitted sender) smtp.mailfrom=jeffxu@google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1729132610; 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=zyoX/VXB6kRQ5Z5Po0ZyyQ1eAQYC/i5UR7HqsdBY26Y=; b=12uAXjTdHXF3aufyQ77669qPdXvf8ybh+fNLjfRn9Mw1P5dGkrFZJBSSWz4oyqJNX712Hd xZv0u8zSIY/f7NJJtxyT3+VCfAXVTI5+Ho3VjzwWU4YaURwXvPS8EGrpH9KzF6zXeFpNlU 7Ndo04a6y3Jt7+vTfPy6O5fK6VFdUi0= Received: by mail-ed1-f43.google.com with SMTP id 4fb4d7f45d1cf-5c932b47552so13565a12.0 for ; Wed, 16 Oct 2024 19:38:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1729132726; x=1729737526; 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=zyoX/VXB6kRQ5Z5Po0ZyyQ1eAQYC/i5UR7HqsdBY26Y=; b=ioac8SQ8jCptblBg15fsB6AZj6FjSW9+inFgtVlvq/NrZkyLxHkbp9A4KWZVyuCtFt 0e/B7OeuIrGQxswEzuAb4Wm1cg8DMiKZ+Ns3NE3TDbKUz9/SLETj/BykjmykQYRt/l0O +x0XthaKiROLL6XGO24E08wFA6OC6OIiYJ7kOcb1UO9/Kiy13Sp5jqf4HNb6kXU/wlfF +1bq2M/Hx8pT81W4g+k8VkOb/VDEYmIyeMC38MVbxokLiVrCmMRyMvzzHq+Z6UVkfIT7 VTFSaAkv9RxmbyYQ4wLBg5lJTVvL+Vw8YWpB5eMR9axeejsieD+9eL06qfX3QvI1urTq UAIw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1729132726; x=1729737526; 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=zyoX/VXB6kRQ5Z5Po0ZyyQ1eAQYC/i5UR7HqsdBY26Y=; b=HoMAYqwQZLcEO+NK3BK/QvluqxJ7EkJSolEbTDgKPNE2fM0MUfaUcbb0dHw2mRcvvZ bXG2WHUVv1pyFVZi6m0xcoQ4seu9kYaJbKVhuWGekk1jTov0Cpz/IqsDRimmqSjtlt8V wm9d+UP5zeHCZ6p3uYirZ88RT70NOsXBzkG9TbZMqfVOlNSmDeyu1wut7/sUUSCBH9QJ Jvc6w4Z0UkaIh4AY7Au2tprzXnv6n8e/wJYnZtbYTA56Hi57S9GWaLgK6AYs6OY2GRH9 gkdJP5gI1z1a5FJ4A9AFWWdv+yyvi5Ptz+56mvX3INz2PCC8Qb4UjrfyS5Eu7OHtdUdG 4xjw== X-Forwarded-Encrypted: i=1; AJvYcCXonmaVU/0BOtSLocfcV19Ll+ngHHO0+GDvzWDCUrh1vKJVuSz819KZ1AKX43xwo+z5Ez3lLcecjg==@kvack.org X-Gm-Message-State: AOJu0Yy/xBBixVCMjufuowZPC454yrErQ3ENzyzilA/ZhRXYuPJGWTz1 ohMbo323t+BZUN6+c2cCLeExvyeCRWWAm42Qe7g3o0hzI2mXK3C4xh52pX5QeuCFQPQ6Wpf6paj WKtfEVqxk3eOx3Op1Fg7TpDqGGNkvQR7Vg0Y/ X-Google-Smtp-Source: AGHT+IGOV3tbbxDMxDfkL5dTKHJ47DuzvRwXqoEqBnSc9W0BsLddUP4XNhaEM2ZgUZfm9d/AKVluzoXHH1/1goEuskU= X-Received: by 2002:a05:6402:5107:b0:5c5:c44d:484e with SMTP id 4fb4d7f45d1cf-5c9ebb55cf8mr149642a12.1.1729132725983; Wed, 16 Oct 2024 19:38:45 -0700 (PDT) MIME-Version: 1.0 References: <20241017022627.3112811-1-jeffxu@chromium.org> In-Reply-To: <20241017022627.3112811-1-jeffxu@chromium.org> From: Jeff Xu Date: Wed, 16 Oct 2024 19:38:08 -0700 Message-ID: Subject: Re: [PATCH] munmap sealed memory cause memory to split (bug) To: jeffxu@chromium.org Cc: akpm@linux-foundation.org, keescook@chromium.org, torvalds@linux-foundation.org, usama.anjum@collabora.com, corbet@lwn.net, Liam.Howlett@oracle.com, lorenzo.stoakes@oracle.com, jorgelo@chromium.org, groeck@chromium.org, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-mm@kvack.org, jannh@google.com, sroettger@google.com, pedro.falcato@gmail.com, linux-hardening@vger.kernel.org, willy@infradead.org, gregkh@linuxfoundation.org, deraadt@openbsd.org, surenb@google.com, merimus@google.com, rdunlap@infradead.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: 5EFEF2000E X-Stat-Signature: ooqbzo6cq6amfhf33jxqcaxrbim5tfs4 X-Rspam-User: X-HE-Tag: 1729132718-814890 X-HE-Meta: U2FsdGVkX1+lYz2qyyPEJJEkxQaGXxRfMzG2pb5SJj7rACJAETfnG49N2S/u5MMWz6iHcsav302w633hLK7yEhJLZJwfJaiOhNd08KTMOw/to1Cp2zssOE98DRFdZpETvOEPHwaVqusF8fpkr3d90PB+1531l/HYRURWEqrI0b7OGd1JCp8Ss7eyrABOCItR5kYS+9KeXTDhqmbQFM4XnRAfr2KsGYmS1ejro6xuSODQfOvFG4uSH1MKXyGDqckV4P+TcnbY1IKJP29EyHXl/wYkQTQI0cwm/gWgxHKtONm3OjwkuwgX7Cerv6w6sktnhOm48TpggEui91n4FwiFhcmcHCFUhOc2uxxwlPqWGcqc3xx8GvZBY7bD0tJroWR4NQVREr1NdY79yy17GROnOXtZUc9O2H7quXN6Me4NsHR8tHDTkRpzGcQ8wG8Rkm3ip56xmfccrN6JG9Wvat26FAQBrHAapXglJM8KE/UN51NIb6aaoMiUbmwCHJkAGZm7O3ud3itgTOikEhM5hL4GZjeVB6NTTiEaX/oSI307Atj26/1Q+OKp+26C7Oi1YW+aoVP37az3VjkZMB7zS7JnvlmNNCGTiLY2uaWpTBwJXUWKu7dmaBjkTkZ343aqr7ZjxgG132ej//bkwErLnswEn7Q2xl7G0YiO6QqA5xS4OLvjeB9miZoZGud0ueSIngWYc00Vii5vzmXHiVStVxx11GQAr2cQUpZqzprQvKCZEucbfcdMOAEg2fuzY33ktwUPGz5FD4Dr1hLkUCB9BvMZxBTEC4Pa2fxsjr+BGMYChPtPxB/Lo+yaETBxHfrJfadvmY1tN1EaiAtJPWuSpwlgVzt2Iq9+DcQjwOYHkcQlkkO//VjP9nhE1XjW92g8fIzxQEvVfDiXocZeSJCz5ooar9WSfgP1niPX4o83EyZUUMwXw1kfg/mGmA5Rr4Xz4xPJiDqNej8ZurrMYeS9CXb IN+8ONk9 V8tVK849TO8g1ZLsILF6/+IlvyoxUBrZcYjd9Z19c7ix9wWwEWQRmiMsr7dTG1lCuAW88ARyenJoKH5DDScZKdVwkO/8YGZ3jiagteUArhfBWHgE1aw7I4ZKcoJcUMa5TqwXW1DByY5/dJtkC0/CWpOlDPSX0tmUdFr4bns2n4/kpnyIR9qDFyjPYhO1o0HupDgrK8aniTsX5o0VrtqBdnnGf0TXXbDrwCZAZB0OPLZTbmBdtIzpoYmalaE7x7mEAi+rQr+U1AvcVqBx2gPn7TzzZoSVfDzixran9i2FkzKpkGGetF/p2NUZdBQ== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000004, 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, Oct 16, 2024 at 7:26=E2=80=AFPM wrote: > > From: Jeff Xu > > It appears there is a regression on the latest mm, > when munmap seals memory, it can cause an unexpected VMA split. > E.g. repro use this test. It appears that this test has some dependency tests that haven't been merged, so can't be run as is. This is the repro step: - Allocate 12 pages (0-11). - Seal middle 4 pages (4567) - munmap (2345) - this will fail Seeing VMA for page (0123) is split as 2 VMAs (01)-(23), those 2 VMA have the same attribute, and should be merged as one. > --- > tools/testing/selftests/mm/mseal_test.c | 76 +++++++++++++++++++++++++ > 1 file changed, 76 insertions(+) > > diff --git a/tools/testing/selftests/mm/mseal_test.c b/tools/testing/self= tests/mm/mseal_test.c > index fa74dbe4a684..0af33e13b606 100644 > --- a/tools/testing/selftests/mm/mseal_test.c > +++ b/tools/testing/selftests/mm/mseal_test.c > @@ -1969,6 +1969,79 @@ static void test_madvise_filebacked_was_writable(b= ool seal) > REPORT_TEST_PASS(); > } > > +static void test_munmap_free_multiple_ranges_with_split(bool seal) > +{ > + void *ptr; > + unsigned long page_size =3D getpagesize(); > + unsigned long size =3D 12 * page_size; > + int ret; > + int prot; > + > + setup_single_address(size, &ptr); > + FAIL_TEST_IF_FALSE(ptr !=3D (void *)-1); > + > + /* seal the middle 4 page */ > + if (seal) { > + ret =3D sys_mseal(ptr + 4 * page_size, 4 * page_size); > + FAIL_TEST_IF_FALSE(!ret); > + > + size =3D get_vma_size(ptr, &prot); > + FAIL_TEST_IF_FALSE(size =3D=3D 4 * page_size); > + FAIL_TEST_IF_FALSE(prot =3D=3D 4); > + > + 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 4); > + > + 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 4); > + } > + > + /* munmap 4 pages from the third page */ > + ret =3D sys_munmap(ptr + 2 * page_size, 4 * page_size); > + if (seal) { > + FAIL_TEST_IF_FALSE(ret); > + 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 4); > + > + 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 4); > + > + 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 4); > + } else > + FAIL_TEST_IF_FALSE(!ret); > + > + /* munmap 4 pages from the sealed page */ > + ret =3D sys_munmap(ptr + 6 * page_size, 4 * page_size); > + if (seal) { > + FAIL_TEST_IF_FALSE(ret); > + FAIL_TEST_IF_FALSE(errno =3D=3D EPERM); > + > + 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 4); > + > + 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 4); > + > + 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 4); > + } else > + FAIL_TEST_IF_FALSE(!ret); > + > + REPORT_TEST_PASS(); > +} > + > + > int main(int argc, char **argv) > { > bool test_seal =3D seal_support(); > @@ -2099,5 +2172,8 @@ int main(int argc, char **argv) > test_madvise_filebacked_was_writable(false); > test_madvise_filebacked_was_writable(true); > > + test_munmap_free_multiple_ranges_with_split(false); > + test_munmap_free_multiple_ranges_with_split(true); > + > ksft_finished(); > } > -- > 2.47.0.rc1.288.g06298d1525-goog >