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 46C91C3DA61 for ; Wed, 24 Jul 2024 16:30:10 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id CECF46B0088; Wed, 24 Jul 2024 12:30:09 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id C9BDA6B0089; Wed, 24 Jul 2024 12:30:09 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id B62C76B008A; Wed, 24 Jul 2024 12:30:09 -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 9661A6B0088 for ; Wed, 24 Jul 2024 12:30:09 -0400 (EDT) Received: from smtpin06.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 3EA6540AB1 for ; Wed, 24 Jul 2024 16:30:09 +0000 (UTC) X-FDA: 82375183338.06.4430859 Received: from mail-oa1-f46.google.com (mail-oa1-f46.google.com [209.85.160.46]) by imf06.hostedemail.com (Postfix) with ESMTP id 4237518001D for ; Wed, 24 Jul 2024 16:30:07 +0000 (UTC) Authentication-Results: imf06.hostedemail.com; dkim=pass header.d=chromium.org header.s=google header.b=htwBMtQS; spf=pass (imf06.hostedemail.com: domain of jeffxu@chromium.org designates 209.85.160.46 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=1721838583; 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=N7lztNYuEo9tOgjlTQamOhpPHgaWKhp9X0WW2dkz7Ls=; b=f48bm3Yj4oS39YrwGNB0zMJd/BdSU229xvcpXCSY7zijA6cZ+GmauFQtkj4j1ss2vYXI4T i6YgE8hU85+DIucfxtmTOCchwtfYYXXBlDR9jM1ncEFjJS/ZVXYBuzMFb9GVVNC8uIjDNT MbQGL/ledChK/ulzYty+7eWW8lKjtng= ARC-Authentication-Results: i=1; imf06.hostedemail.com; dkim=pass header.d=chromium.org header.s=google header.b=htwBMtQS; spf=pass (imf06.hostedemail.com: domain of jeffxu@chromium.org designates 209.85.160.46 as permitted sender) smtp.mailfrom=jeffxu@chromium.org; dmarc=pass (policy=none) header.from=chromium.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1721838583; a=rsa-sha256; cv=none; b=GhUJ1znrq/MbPDgbkdKL/srqpSEl4XuzFbfwPipHyZLDVGOoSs7Mk7WQLLrqItQo7WESCF 3x+j7Un8YNLfj2g/hRper9ROWlmggIjRaKsPVbXRl/HcucNGHHYo22nUj4XnlUUO9nz00B c3O6tYwGkO4IviER02hv9r0Mb57Im6U= Received: by mail-oa1-f46.google.com with SMTP id 586e51a60fabf-264988283a3so267517fac.0 for ; Wed, 24 Jul 2024 09:30:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1721838606; x=1722443406; 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=N7lztNYuEo9tOgjlTQamOhpPHgaWKhp9X0WW2dkz7Ls=; b=htwBMtQSp2mPGiagLzwVFKBEWMmYxLITz6zCpBC1LhOy5QjIFoF5U5ixFCWnHOsN3X sf7cBFCzZ2aCIMi1uqY/gHKOnEQvevhqaPq6ktCzvbNqSobTV8/sCe7aceFqC4CkVIDO Y3cGOSlJIgDFJ2PeYmXo8/nd6uctGwuPL5FNQ= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1721838606; x=1722443406; 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=N7lztNYuEo9tOgjlTQamOhpPHgaWKhp9X0WW2dkz7Ls=; b=Uca5o3XG3/csiT7d4gjduenDcbJmBzYnUD4/7amrPpYPGK07y9xuY8DONh1Im4Rx/X 5Cne+8ZGImXz7lZO+0ftVqRB8DV671Q3ifPUQZQgDmJV9lB+GywRHbkQJLQ3AHq8c4F2 PcVXLj3VWpjaw43SujopxL12fbaoVlMXPZRMuHiA36ytEXUn9GqXCflh57u03w2DNgaU WV1NNGGPDGB7vweU80iSJuhkLqGxSkmjOzoX3oCvhEnM8De5gj6ZJGbdzFqQl5hW67Ud cRT4D3RAvb/EzpZrv6z8xjhieh/aZ1U2pQ8O5gOJMUY2Livrq3oneARDxes737cEGyTe dw3w== X-Gm-Message-State: AOJu0Yx5NIk+99ZATeVLGiMtGdrO3Rq6RpoHz9FKzMk49hfl1rHDePi6 gIRJ0WX3pUQfkDGjCyh/hhoHYHvvT732yqV/oM6GC8Jsl7eXT2whsR5Jo1iocpRl7f0Udfw4BAP 59upJ62dLe9/oXKwOXcsOTx8aePZNw7mB5An6 X-Google-Smtp-Source: AGHT+IGTs9hbXCcXTvWGTuOfb3UV63tLQO/iESik52wc/sl1W1vgwk59lj8KonlEInLeG+Ynz7uDRPcWurMwZ0i5H2s= X-Received: by 2002:a05:6870:ac11:b0:25d:ff4c:6772 with SMTP id 586e51a60fabf-264a0b7ef07mr52142fac.3.1721838605745; Wed, 24 Jul 2024 09:30:05 -0700 (PDT) MIME-Version: 1.0 References: <20240717200709.1552558-1-Liam.Howlett@oracle.com> <20240717200709.1552558-19-Liam.Howlett@oracle.com> In-Reply-To: <20240717200709.1552558-19-Liam.Howlett@oracle.com> From: Jeff Xu Date: Wed, 24 Jul 2024 09:29:53 -0700 Message-ID: Subject: Re: [PATCH v5 18/21] mm/mmap: Move can_modify_mm() check down the stack To: "Liam R. Howlett" Cc: linux-mm@kvack.org, Andrew Morton , Suren Baghdasaryan , Vlastimil Babka , Lorenzo Stoakes , Matthew Wilcox , sidhartha.kumar@oracle.com, "Paul E . McKenney" , Bert Karwatzki , Jiri Olsa , linux-kernel@vger.kernel.org, Kees Cook Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspamd-Server: rspam11 X-Rspamd-Queue-Id: 4237518001D X-Stat-Signature: i7j55njwh7956eum7gfo7bt75si6f6jr X-Rspam-User: X-HE-Tag: 1721838607-592652 X-HE-Meta: U2FsdGVkX1+3q0YGBvjcuwZiYiej+KvVaGL3i0/k/64Kg2eDBc/E6OKugTfVvLOIwR4BzzrVZ6ah6ErWBjgmrpdzaQ9ZAzVJ5aNDTCvlTtrI1Dj04/It169YutcUlnezMYmhwbvWDVcUB8fGNAHo05l9gLlcJUjhIR0Apsadp9Q3D537fC57ClSjf3Vq+kWfKUrvPtt/izpHXsHCjnSg+T7I+t7REdRDMVrH4+tKF7rjjwFLwsNgjLVxdN5qtVxixRyYJvl/jJuY8VqvQiqys/3ttg/C4lSa9swdarJ4QHTT6Y+oj0/XpYKVujmmu86zPlcp1xqooA8+NLjpfUs+tRIG/SB32mrO1zgHVGK2oGPyhIp4JXvALk1kgjjFzsgLx12GnzbwwEZetZrVKNRl4sneKSrbUwSYS4NpjIU6jeEH5c1PGLFYsguEWmhZlvBNZY1bmHZwgwyzcP5WsEzNnRH/kXLDTO6rNUv+Pnxc/Gh4+bY7UoXvUJzscfr4NBJ4lxh5qNVptWAbZ0dZs5UXMjCETFV7cf1+ByaUH5ibmOgxdTEjhTCrAa72nhjMTYXss/dJOnoRRyyYGe26+bi0yti+1S5AKEA/hgu+MpU2NhSueibliMmucfyik3p5UPl29jNH0Ow4VNxN7pWDPsQe6sCDUrbzdzesr0Pymug1hXePDxzWawURt7s7A9RFBXqU6gvHigVFTDFDgYiVsURD2aFc9OUYBf/5V6o5d2hwgrfsFxQTah94p0vNnIN0jjiBeYVFSQdRlOZHmQkyLj437HaE6aceWO6UHszUSJdoWe3dsgM5a/PjVrZJ8ic7j3SDwig6AhzbdH6mrchTp5iWkVI7PHRe1d7AYth+yv21s9KjLssta65H5GFw4mRZ4knbjigtk1jPkY0CzdNCJDpcz8yydnBzwk8SBkyuuHFHkKtACkXS7eceoaqczgeiKmHL2XA7BoyLg9Fsl/8Tsqe Kxw920OA OIt8xdifcfN8EQiWC+JqKjoPnX0Qe2DVnsrPH3C8u2OZPmIh+Lv/QWBvw1GA45YzegfONfb+NtFRpgCoVjE4ErpKBYJ2pvioSfRnS6niqYQD24okaVDqInlob+J4d/Rm5xqy/sYU0SWmGQMbDMOhbzNwrRFgfYi9awN1D80F+WG6+55vmbUw6sVnnf6xPFFIiU6fzILKJvpgW443U5QHG0wFPmySpDpzgAlm9kc4/aQzbdmdkHgT6Ym/Y8grvTNvn68Fymj1apEccixiDEZh1u8QeqKcrtDgpkPYLnJlMB8bhbCc= 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, Jul 17, 2024 at 1:07=E2=80=AFPM Liam R. Howlett wrote: > > From: "Liam R. Howlett" > > Without an arch_unmap() call so high in the call stack, the check for > mseal'ed vmas can be moved lower as well. This has the benefit of only > actually checking if things are msealed when there is anything to check. > That is, we know there is at least one vma that is in the way and needs > to be checked. > > Only call the can_modify_mm() in do_vmi_align_munmap() and the MAP_FIXED > case of mmap_region(). > > Signed-off-by: Liam R. Howlett > Cc: Jeff Xu Reviewed-by: Jeff Xu > --- > mm/mmap.c | 24 ++++++++---------------- > 1 file changed, 8 insertions(+), 16 deletions(-) > > diff --git a/mm/mmap.c b/mm/mmap.c > index 117e8240f697..a32f545d3987 100644 > --- a/mm/mmap.c > +++ b/mm/mmap.c > @@ -2877,6 +2877,10 @@ do_vmi_align_munmap(struct vma_iterator *vmi, stru= ct vm_area_struct *vma, > struct vma_munmap_struct vms; > int error; > > + /* Prevent unmapping a sealed VMA. */ > + if (unlikely(!can_modify_mm(mm, start, end))) > + return -EPERM; > + It is nice to consolidate the check for do_vmi_align_munmap and do_vma_munmap to single check. > init_vma_munmap(&vms, vmi, vma, start, end, uf, unlock); > error =3D vms_gather_munmap_vmas(&vms, &mas_detach); > if (error) > @@ -2927,13 +2931,6 @@ int do_vmi_munmap(struct vma_iterator *vmi, struct= mm_struct *mm, > if (end =3D=3D start) > return -EINVAL; > > - /* > - * Prevent unmapping a sealed VMA. > - * can_modify_mm assumes we have acquired the lock on MM. > - */ > - if (unlikely(!can_modify_mm(mm, start, end))) > - return -EPERM; > - > /* Find the first overlapping VMA */ > vma =3D vma_find(vmi, end); > if (!vma) { > @@ -2991,13 +2988,15 @@ unsigned long mmap_region(struct file *file, unsi= gned long addr, > if (!may_expand_vm(mm, vm_flags, pglen - nr_pages)) > return -ENOMEM; > > - if (unlikely(!can_modify_mm(mm, addr, end))) > - return -EPERM; > > /* Find the first overlapping VMA */ > vma =3D vma_find(&vmi, end); > init_vma_munmap(&vms, &vmi, vma, addr, end, uf, /* unlock =3D */ = false); > if (vma) { > + /* Prevent unmapping a sealed VMA. */ > + if (unlikely(!can_modify_mm(mm, addr, end))) > + return -EPERM; > + So the optimization here is : when no vma found in the given addr range =3D> no need to call can_modify_mm. > mt_init_flags(&mt_detach, vmi.mas.tree->ma_flags & MT_FLA= GS_LOCK_MASK); > mt_on_stack(mt_detach); > mas_init(&mas_detach, &mt_detach, /* addr =3D */ 0); > @@ -3370,13 +3369,6 @@ int do_vma_munmap(struct vma_iterator *vmi, struct= vm_area_struct *vma, > { > struct mm_struct *mm =3D vma->vm_mm; > > - /* > - * Prevent unmapping a sealed VMA. > - * can_modify_mm assumes we have acquired the lock on MM. > - */ > - if (unlikely(!can_modify_mm(mm, start, end))) > - return -EPERM; > - > return do_vmi_align_munmap(vmi, vma, mm, start, end, uf, unlock); > } > > -- > 2.43.0 >