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 7C842281368 for ; Fri, 27 Mar 2026 15:24:47 +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=1774625087; cv=none; b=rCrpZo64v4WofosJwo/0oVezKI7BajIRAC8TvrrmV+3PWU/6nCB2ZOqIb+MZg6BqvjGhcoKGB4K/kyLettvlxhY8m0Dsp585aanqfuicEwuzZLzvxz/7Dm+8PTY+btjvHpyGiPrgW3DIEJn/hUyGm5RPA+Wg6FB/usbeP3cXmyc= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774625087; c=relaxed/simple; bh=VYDOdE7sgW/03DVpEUGPbLiRjdDvx9n0cfqzfv8tiI4=; h=Date:From:To:Cc:Subject:Message-Id:In-Reply-To:References: Mime-Version:Content-Type; b=d4PRd5VNCrNqa60l68u07bIoTpHCR3mIncG83I8mUUAeYFb4yCAi9AHMJRfimpG8okh7foe1skze8lQD7RrGGNIxKzFVGyZissMNocNr8/lWSktXMhCDRyTsgmWTpJFfD4Zh51ckwfJ5ZcwmPAMqHe7A2O2k9ZAYvhTr5BNN+ic= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux-foundation.org header.i=@linux-foundation.org header.b=NnJa6XL+; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux-foundation.org header.i=@linux-foundation.org header.b="NnJa6XL+" Received: by smtp.kernel.org (Postfix) with ESMTPSA id D571DC19423; Fri, 27 Mar 2026 15:24:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linux-foundation.org; s=korg; t=1774625087; bh=VYDOdE7sgW/03DVpEUGPbLiRjdDvx9n0cfqzfv8tiI4=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=NnJa6XL+xT3kLl1ceyl2OHKf2JXNWdFzP8N/4v2qXjqc58mkc0qI8n+IJXyNgUlWp feAmBo7aXumOAtOcxV+qUCcBiZvgm3fFAuHLsHoMsWJ/mIDDbI82t5GgzendgIhivU EhRVW/VC5s5CcDjMgKwnOxuCz/w53MhA41RrAXvA= Date: Fri, 27 Mar 2026 08:24:46 -0700 From: Andrew Morton To: "Lorenzo Stoakes (Oracle)" 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: <20260327082446.4e7fd5398043d56cebb35a54@linux-foundation.org> In-Reply-To: <20260327090640.146308-1-ljs@kernel.org> References: <20260327090640.146308-1-ljs@kernel.org> X-Mailer: Sylpheed 3.8.0beta1 (GTK+ 2.24.33; x86_64-pc-linux-gnu) 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-Transfer-Encoding: 7bit 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; }