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 1BA19EB64D7 for ; Wed, 21 Jun 2023 00:06:05 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 6A7408D0002; Tue, 20 Jun 2023 20:06:04 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 657328D0001; Tue, 20 Jun 2023 20:06:04 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 5461E8D0002; Tue, 20 Jun 2023 20:06:04 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 43E418D0001 for ; Tue, 20 Jun 2023 20:06:04 -0400 (EDT) Received: from smtpin29.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 08AE41C8249 for ; Wed, 21 Jun 2023 00:06:04 +0000 (UTC) X-FDA: 80924812248.29.0C2995C Received: from mail-yb1-f176.google.com (mail-yb1-f176.google.com [209.85.219.176]) by imf09.hostedemail.com (Postfix) with ESMTP id 33E59140020 for ; Wed, 21 Jun 2023 00:06:02 +0000 (UTC) Authentication-Results: imf09.hostedemail.com; dkim=pass header.d=google.com header.s=20221208 header.b=K0nt7buS; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf09.hostedemail.com: domain of surenb@google.com designates 209.85.219.176 as permitted sender) smtp.mailfrom=surenb@google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1687305962; 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=y3G/JH8xUdw8gSx/YEs/5ci0zS1wvZQqJqScEFLkqKI=; b=YD/40UunarXmvUWLEZkv3dgb+L8cfUojXLHU0JPjatcevakl/OKnrzxfAohts3RHFn30oo 9Y4zDSTxb8LqEpMnr9f32WOaC78t97bo9wJ5Sesvg8yofLwlz0WlxKiDpWM8Nh/eDMXlof He9zrba5OsftJRdidS/tqvwTUC+BNTQ= ARC-Authentication-Results: i=1; imf09.hostedemail.com; dkim=pass header.d=google.com header.s=20221208 header.b=K0nt7buS; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf09.hostedemail.com: domain of surenb@google.com designates 209.85.219.176 as permitted sender) smtp.mailfrom=surenb@google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1687305962; a=rsa-sha256; cv=none; b=4cPp7BnkcX1+HE0I4BIr+NtO8KEdwGhh0cuilp2tJz9+7zp0bDPUyhQ9dHCIbB53kF9B/V wrNbSeKNdSAHxziLmYKVnoPvjSwHVAtTXedAIvxpknO9EKdlRWbvzj2u5XdX2XIgcSbQLj 8IR+Rfx3rdYlsgbPVI5TkN+LnDjm800= Received: by mail-yb1-f176.google.com with SMTP id 3f1490d57ef6-bf3934ee767so4002406276.0 for ; Tue, 20 Jun 2023 17:06:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1687305961; x=1689897961; 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=y3G/JH8xUdw8gSx/YEs/5ci0zS1wvZQqJqScEFLkqKI=; b=K0nt7buSuZeY8253GtOBvNOwCaBAwpvBeFzHgStIvYAyDQbUyw5Ggzr3/eBnacM1Ri EyCHLc8gYodL0dMMwHX7T0m20wsKcnPbiJY+SLgA3xT8LvJ2BKd1/3sABKCMbk+ArHOC 7WUEcml7ty8dHzodyCukKj4Zrr67KdcdOrQ9QjJ/hRU1Ya9mWnTymABHxmOdJUgLTSid cFvXyzety5eJ/ayI6nt9rIQyqQ0VB6sgVr8gIXyO9i4AeIn/msXhQd2n8DIL0S3Juon9 rH+mv4+hbQ+Vi0RnAqOu0jXtrWb7KDJ1SGPAFllVAJTNSUHdGzACTBX2PG4AFQwJGQvU FDcw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1687305961; x=1689897961; 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=y3G/JH8xUdw8gSx/YEs/5ci0zS1wvZQqJqScEFLkqKI=; b=lyEgDjpw38pUut7sJj0hY1CbvMCNMZRZKQ5tg27+nZ14EQB2ljF8Wxf0aMXLA8+/9r kTDyM/LFZ3X/ryB32dqYVZqMp+OlEQj9DbOLd5LUjUe5eo466NVo20Iiz13onIJcz8TL gyo4AMsr5mPJ0EYJXMSQZQ6ycTd/f7FWkuxA660vZw4aXVHPn45nq5wC7KpsZkf4tNEa 94VFK8j69wimG9KVk7gotz5IPAzj/PVfySzAJ/e5rlVIrO/LVBw9CPlYIv78zsJny4G9 URXpHgtRduT/dZz7vZ0igglSi0ESFeHuK5+pyNHlnfP/57A4lKozmj7gcZ+QLs20XVp+ ZyOA== X-Gm-Message-State: AC+VfDyqeX48O9xjNgLIgHqem+c9JmuDhg6NSYLzdQViDwbzEdFt0OIt VjLZyrEfjgVzzpObpwBAylDq6Ms8zHJyghK3xquehA== X-Google-Smtp-Source: ACHHUZ6HliN/tqzrkE+hwWXJ3eDEJh9Paxo8Q+e7QGdLi4QHGQOV5HKfF09Xm1pULkdijbsbh3oBaFeCImPM3G3EFro= X-Received: by 2002:a25:32d6:0:b0:bca:f238:5ff2 with SMTP id y205-20020a2532d6000000b00bcaf2385ff2mr14405390yby.8.1687305961083; Tue, 20 Jun 2023 17:06:01 -0700 (PDT) MIME-Version: 1.0 References: <20230620235726.3873043-1-surenb@google.com> <20230620235726.3873043-3-surenb@google.com> In-Reply-To: <20230620235726.3873043-3-surenb@google.com> From: Suren Baghdasaryan Date: Tue, 20 Jun 2023 17:05:50 -0700 Message-ID: Subject: Re: [PATCH 3/3] mm: check for VMA being detached before destroying it To: akpm@linux-foundation.org Cc: willy@infradead.org, torvalds@linuxfoundation.org, vegard.nossum@oracle.com, mpe@ellerman.id.au, Liam.Howlett@oracle.com, lrh2000@pku.edu.cn, mgorman@suse.de, linux-mm@kvack.org, linux-kernel@vger.kernel.org, kernel-team@android.com Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspam-User: X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: 33E59140020 X-Stat-Signature: mpxzaxkac98etiyap5pxw1o47pgqjjp6 X-HE-Tag: 1687305962-109762 X-HE-Meta: U2FsdGVkX1/8Wqgsk0j+PF/3Prdfmz//GoPTY3vbz/W+pKLfU1MxVwXq1HBgGfer2VkwgzGPO0yjF6Ecf/g/qipgsgZo6m/7YXOY8NMVB3hab8bZMmUc9a2pZn9zH1mhvb8MywYtEjXzQEt2v/WkqYY8PEjpkGUG0ra++VG4if6ThOYoQhGZmXRPUPn2n9VfhHNevd1+4dlq8BJPhcqOch8weob07ocFG+nRotWpU7bjMgpacdobsFM13WoQNwHRd6kMaMu+Zt/NR7HcA4N56XVDF+KOvkHfKdao20mr9F8VmY4u24d/3RT3cfi876E2FJt3HyyU68xbkrj0I9D8wwqqRus4OjoW4nlBgKm1NUvJ1w3MPktxzP9/Bm6uTBlECSIEoZqZ9Y06cU6HrbtTOCEUhp+FL42pUIoVZCvl67JwMjhZSDVqTNe0CDC4Dq3EMeFBEB49dGhFb9ZNuAfkNAKgL8rAUm2nGtei4OOxjEuKpcwqXovSK5GrdvzF5BTSfeFggAIoplP0jpKzph2O2I21oFm2ZWN5nuOUaDcW3riUmls+u95MGavvJT/iOvMlGzc3h1ipAqBAEl7PWRFNJGeM51v5PM3LEYQ3+H747YruADdBD/eH+XBT/txeWfHL+0xNdMgJbAaW+DKcNColSTfX8h176EVeSuAs8ioOVYshnIkYfXKz6o/U4zIl2yQVd8ZOfMzX9hx0Hb+4ZtNK+h+Bfk8sh/uTnuux0W2+e9dodPkNHyaye8G9Me7M2PcTTpdFzkMeoKmhR/aki0sUzTtbmYNLB0xk76QPq3TKbd8eRkNwuL8J4S38ftkV5scijs8G7AbJFTxkILxNNfguBPRZwsDT1zQDvk+nfXA9k4iqDG91FsDCUp4zzZcMCyTxcg9lohmUWZvSQRi2bzm9QpxbdJBhQ9mwgp4Hm2WzsdDfVBVIPx6SYHI1VrZ3sTxqN0vALloc9kc8jl6Zaim LB0jj83Y Z2SPOra/NJkyCeAjObbsGZDqxeN6TNHYxr4eeTXG97e/ROzt33AuNwERXrD7d9mX+H+/AwQc8k1bx6ACmBXIHP/WIRwjI0yTgWZQkiiEwXcighHoXajdUmZ3kAzYhJlnFEQUZnJoQI1itPjplaO011ir2eMQNXgstK+y2G5A+nwZpUl6bAEC61H3lSucXYui5f6dSeS02xcnA3p0wn+esqYB9pL7+lSZIYZI0CHE2lheyc2zuuUo9HQMkeKX4qSuzvup/cdOrAfU7EcvO5ZGOsTwEgZtglU/gF0C1kETI/Dm9a41MgzD9tTi+Mg== 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: On Tue, Jun 20, 2023 at 4:57=E2=80=AFPM Suren Baghdasaryan wrote: > > By the time VMA is freed it has to be detached with the exception of > exit_mmap which is destroying the whole VMA tree. Enforce this > requirement before freeing the VMA. exit_mmap in the only user calling > __vm_area_free directly, therefore it won't trigger the new check. > Change VMA initialization to mark new VMAs as detached and change that > flag once the VMA is added into a tree. > > Suggested-by: Linus Torvalds > Signed-off-by: Suren Baghdasaryan My tests did not generate the warning but the test coverage is far from perfect, so if someone can run extensive testing on this one that would be greatly appreciated. Thanks, Suren. > --- > include/linux/mm.h | 4 ++-- > kernel/fork.c | 2 ++ > mm/internal.h | 1 + > 3 files changed, 5 insertions(+), 2 deletions(-) > > diff --git a/include/linux/mm.h b/include/linux/mm.h > index 74e3033c9fc2..9a10fcdb134e 100644 > --- a/include/linux/mm.h > +++ b/include/linux/mm.h > @@ -247,7 +247,7 @@ void setup_initial_init_mm(void *start_code, void *en= d_code, > struct vm_area_struct *vm_area_alloc(struct mm_struct *); > struct vm_area_struct *vm_area_dup(struct vm_area_struct *); > void vm_area_free(struct vm_area_struct *); > -/* Use only if VMA has no other users */ > +/* Use only if VMA has no other users and might still be attached to a t= ree */ > void __vm_area_free(struct vm_area_struct *vma); > > #ifndef CONFIG_MMU > @@ -751,7 +751,7 @@ static inline void vma_init(struct vm_area_struct *vm= a, struct mm_struct *mm) > vma->vm_mm =3D mm; > vma->vm_ops =3D &dummy_vm_ops; > INIT_LIST_HEAD(&vma->anon_vma_chain); > - vma_mark_detached(vma, false); > + vma->detached =3D true; > vma_numab_state_init(vma); > } > > diff --git a/kernel/fork.c b/kernel/fork.c > index 41c964104b58..000fc429345c 100644 > --- a/kernel/fork.c > +++ b/kernel/fork.c > @@ -540,6 +540,7 @@ static void vm_area_free_rcu_cb(struct rcu_head *head= ) > > /* The vma should not be locked while being destroyed. */ > VM_BUG_ON_VMA(rwsem_is_locked(&vma->vm_lock->lock), vma); > + WARN_ON_ONCE(!vma->detached); > __vm_area_free(vma); > } > #endif > @@ -549,6 +550,7 @@ void vm_area_free(struct vm_area_struct *vma) > #ifdef CONFIG_PER_VMA_LOCK > call_rcu(&vma->vm_rcu, vm_area_free_rcu_cb); > #else > + WARN_ON_ONCE(!vma->detached); > __vm_area_free(vma); > #endif > } > diff --git a/mm/internal.h b/mm/internal.h > index 68410c6d97ac..728189e6c703 100644 > --- a/mm/internal.h > +++ b/mm/internal.h > @@ -1068,6 +1068,7 @@ static inline void vma_iter_store(struct vma_iterat= or *vmi, > vmi->mas.index =3D vma->vm_start; > vmi->mas.last =3D vma->vm_end - 1; > mas_store_prealloc(&vmi->mas, vma); > + vma_mark_detached(vma, false); > } > > static inline int vma_iter_store_gfp(struct vma_iterator *vmi, > -- > 2.41.0.162.gfafddb0af9-goog >