From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 66FE02882B6 for ; Fri, 27 Mar 2026 15:52:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774626727; cv=none; b=eJkJtmin/taDt+xlOJqaY0zkEgoz9SKhTm000uFaOiWzoYxyEoDyyPA4IW4Dw1m5bZuqbUEUhba1rElXqWs/VTVV9CMjnzJCu7ilDfTWI20QJ3zO8vR2jHWc7BPTh76s+98t6AznwfreyglXqlOcCvzj8TJFN7gve3DaYbRkoPo= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774626727; c=relaxed/simple; bh=S+rziZVihSoBfUqA+7DJs6Ny3tSZzxWwBJfTNWgblG8=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=pk/xswpk6bjdsdYtaCm2kqLdSquE07l3pdq7TpNKNOSeAkZ0Offlwg4r6xjJm1RiK+0uiYJeg40vdugEbVSPL30Icqdq+OIavseFz0/VoW2RHhqt4E/MCa4H0Wi6kX5xvwwBbybUTLUnG0ucAX8JhswybHD8aJnhLKD5aZgb7Fs= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=eGvhQaJ8; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="eGvhQaJ8" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 08D55C19423; Fri, 27 Mar 2026 15:52:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1774626727; bh=S+rziZVihSoBfUqA+7DJs6Ny3tSZzxWwBJfTNWgblG8=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=eGvhQaJ8/qCwDTAZFS6JoiEX9NgaeeQxj/xwvS9eDsDKmDsZUjzfyUY+ueo/fvxOQ /coqGswZ85HEy6I+z9oQYOaBCi/jZrOYk98oOLxYvGPSKKHp0eq9vIeuxB5ovEqU2c PPurJ9RDrbtwzr0tl1T1NV2BQejLjZXMzjV+dV6VlijzgtUnGcrmJBe4r1xUd/hqK+ y+EmeHV4JXbyhUxUqCMEJ/CwaTOGUBF57z6KMagkWgnavsjYsh9Syq7LPRhx6Jyr4Y BYMi75XFawwFTENKpXCiSFPN93tU8+GTULmU7lYXsE8gwIVdOzbChF3SuAccmTt4AY h4VB4Do3UG53A== Date: Fri, 27 Mar 2026 15:52:02 +0000 From: "Lorenzo Stoakes (Oracle)" To: Andrew Morton Cc: "Liam R . Howlett" , Vlastimil Babka , Jann Horn , Pedro Falcato , Jeff Xu , David Hildenbrand , linux-mm@kvack.org, linux-kernel@vger.kernel.org, antonius Subject: Re: [PATCH mm-hotfixes] mm/mseal: update VMA end correctly on merge Message-ID: References: <20260327090640.146308-1-ljs@kernel.org> <20260327082446.4e7fd5398043d56cebb35a54@linux-foundation.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20260327082446.4e7fd5398043d56cebb35a54@linux-foundation.org> On Fri, Mar 27, 2026 at 08:24:46AM -0700, Andrew Morton wrote: > On Fri, 27 Mar 2026 09:06:40 +0000 "Lorenzo Stoakes (Oracle)" wrote: > > > --- a/mm/mseal.c > > +++ b/mm/mseal.c > > @@ -66,7 +66,7 @@ static int mseal_apply(struct mm_struct *mm, > > prev = vma; > > > > for_each_vma_range(vmi, vma, end) { > > - const unsigned long curr_end = MIN(vma->vm_end, end); > > + unsigned long curr_end = MIN(vma->vm_end, end); > > > > if (!(vma->vm_flags & VM_SEALED)) { > > vm_flags_t vm_flags = vma->vm_flags | VM_SEALED; > > @@ -76,6 +76,7 @@ static int mseal_apply(struct mm_struct *mm, > > if (IS_ERR(vma)) > > return PTR_ERR(vma); > > vm_flags_set(vma, VM_SEALED); > > + curr_end = vma->vm_end; /* Merge may have updated. */ > > } > > > > prev = vma; > > This led to some rework in your "mm/vma: convert > vma_modify_flags[_uffd]() to use vma_flags_t". Please check my > handiwork. > > reject: > > --- mm/mseal.c~mm-vma-convert-vma_modify_flags-to-use-vma_flags_t > +++ mm/mseal.c > @@ -68,14 +68,17 @@ static int mseal_apply(struct mm_struct > for_each_vma_range(vmi, vma, end) { > const unsigned long curr_end = MIN(vma->vm_end, end); > > - if (!(vma->vm_flags & VM_SEALED)) { > - vm_flags_t vm_flags = vma->vm_flags | VM_SEALED; > + if (!vma_test(vma, VMA_SEALED_BIT)) { > + vma_flags_t vma_flags = vma->flags; > + > + vma_flags_set(&vma_flags, VMA_SEALED_BIT); > > vma = vma_modify_flags(&vmi, prev, vma, curr_start, > - curr_end, &vm_flags); > + curr_end, &vma_flags); > if (IS_ERR(vma)) > return PTR_ERR(vma); > - vm_flags_set(vma, VM_SEALED); > + vma_start_write(vma); > + vma_set_flags(vma, VMA_SEALED_BIT); > } > > prev = vma; > > resolution: > > static int mseal_apply(struct mm_struct *mm, > unsigned long start, unsigned long end) > { > struct vm_area_struct *vma, *prev; > unsigned long curr_start = start; > VMA_ITERATOR(vmi, mm, start); > > /* We know there are no gaps so this will be non-NULL. */ > vma = vma_iter_load(&vmi); > prev = vma_prev(&vmi); > if (start > vma->vm_start) > prev = vma; > > for_each_vma_range(vmi, vma, end) { > unsigned long curr_end = MIN(vma->vm_end, end); > > if (!vma_test(vma, VMA_SEALED_BIT)) { > vma_flags_t vma_flags = vma->flags; > > vma_flags_set(&vma_flags, VMA_SEALED_BIT); > > vma = vma_modify_flags(&vmi, prev, vma, curr_start, > curr_end, &vma_flags); > if (IS_ERR(vma)) > return PTR_ERR(vma); > vma_start_write(vma); > vma_set_flags(vma, VMA_SEALED_BIT); > curr_end = vma->vm_end; /* Merge may have updated. */ > } > > prev = vma; > curr_start = curr_end; > } > > return 0; > } > Thanks that looks correct! Cheers, Lorenzo