Received: by 2002:a19:771d:0:0:0:0:0 with SMTP id s29csp1246041lfc; Wed, 1 Jun 2022 12:58:14 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxkzDHACBorAcEDJ+Xe4oYBF5v1fxqmlGSGxvAVJ6nytWVe7Nq7kT+PTf4ZnvxZaT3nAl32 X-Received: by 2002:a63:8742:0:b0:3fc:bc8b:e299 with SMTP id i63-20020a638742000000b003fcbc8be299mr886015pge.409.1654113493755; Wed, 01 Jun 2022 12:58:13 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1654113493; cv=none; d=google.com; s=arc-20160816; b=u1+k3ooM0MvC3X8rXMzr53IKqGWyyPlFTMdijybljCvyC+QaUufwdQBKxowKOm2h01 6HwUVEET6RPkxs93VqvDEiLZlZjAwYIb8ZoFiwhxGauTIQD6jPbjgDaI0s5+/FTxDR7b EvkptDzaff4PBlU70zfmK9w5MDbHHQxvUssxiXLiai2STONgLsu1AD7Xa58ijyURxIBp XM1ec2gX1/g0GNtjX4EXSOxyVoof6CzgD8v3q1Sh5nWogEWYEgBRSqaf3cTAahe+b85I 4gV0mzPwFBS7rmRNH5UoNsg59uxO64fRmG9WAcMMMvFC7Ze+J0cauEwXxvKPjtpKG3IU pCng== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:date:cc:to:from:subject :message-id:dkim-signature; bh=rDUfag/ZyU3UC0U2fevGV/BwjiOqATTDOGf1CiGF1qU=; b=OUlcsNOPCbRX8BJ7sLHoTifP2sGPy2ksM8vFKP0qu90F4FIBpfN9ta9PDg9YdO7dfF aK2d1BBEOFEVVO9MQd/Aec4EFmrI8mtFAjOa63XdiQEOgeIl2rpLgJhsWPpvq1eP7QJb iWOelF1zV757hBLlNOHk0+KWckM59fMdb4oUB2MUxPBzNe7WjW+kp7FZWSBg0AtkBpFe POrfOB7qrI9662mjYINEsEd7WnKI9RqZCVxPA+DXTS5P0X4tqLgPPQ+hVq1hiQ9UoqE8 aDe8GH8YyJKySGFTfp24Y03N3y1SRD10kIBYS9z6OfwdUYyIp1k+udn461OkaiwDBJ4N +9dQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=Gzrw4VLw; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net. [2620:137:e000::1:18]) by mx.google.com with ESMTPS id i2-20020a17090332c200b001640aa6d40bsi4121509plr.79.2022.06.01.12.58.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 01 Jun 2022 12:58:13 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) client-ip=2620:137:e000::1:18; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=Gzrw4VLw; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id D088F21681E; Wed, 1 Jun 2022 12:17:28 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S244119AbiEaGGm (ORCPT + 99 others); Tue, 31 May 2022 02:06:42 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34258 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238360AbiEaGGk (ORCPT ); Tue, 31 May 2022 02:06:40 -0400 Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 378FB2E7 for ; Mon, 30 May 2022 23:06:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1653977198; x=1685513198; h=message-id:subject:from:to:cc:date:in-reply-to: references:mime-version:content-transfer-encoding; bh=eTcJ59lDbXzwiy/p35YXCSINz+6XPaJju471Z3f6x5w=; b=Gzrw4VLwFzU1y4+sy3XhjPNN54WvAeMu7prtXuR79TrHB4fIrDV0UaVc cOltpamkwNhCkxdG5QjLoNBi1ijY4tHfP/Urw0mN2DstbFjwixp2DtHN1 YqNbq3cyv/SiiK7Z6H4+t4e0tlGr2DchRU9Ybmak7M/GNG7FvIJ7S6n6o eXBuqyLrLbyqeEKmQmrvOUSrNcU4HA2N2i00fWthNlUKUG37pw1bZ7fKZ JYg0lsWE7j6cBBG6VkS6FgiV+gv3Dt8l1o9rRHWjguamkHIO0B4uwT6aJ 5Ka2HWk4pwfSdPrqA6R6+QB+mITZvry7YJzpP8jgUmXtRRqSeYxvu0X2I g==; X-IronPort-AV: E=McAfee;i="6400,9594,10363"; a="275156766" X-IronPort-AV: E=Sophos;i="5.91,264,1647327600"; d="scan'208";a="275156766" Received: from orsmga006.jf.intel.com ([10.7.209.51]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 30 May 2022 23:06:37 -0700 X-IronPort-AV: E=Sophos;i="5.91,264,1647327600"; d="scan'208";a="551626763" Received: from quanliu1-mobl.ccr.corp.intel.com ([10.254.215.142]) by orsmga006-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 30 May 2022 23:06:33 -0700 Message-ID: Subject: Re: [PATCH v4 1/4] mm: reduce the rcu lock duration From: Ying Huang To: Miaohe Lin , akpm@linux-foundation.org, naoya.horiguchi@nec.com Cc: peterx@redhat.com, apopple@nvidia.com, osalvador@suse.de, mike.kravetz@oracle.com, songmuchun@bytedance.com, hch@lst.de, dhowells@redhat.com, cl@linux.com, linux-mm@kvack.org, linux-kernel@vger.kernel.org, "Eric W. Biederman" Date: Tue, 31 May 2022 14:06:30 +0800 In-Reply-To: <20220530113016.16663-2-linmiaohe@huawei.com> References: <20220530113016.16663-1-linmiaohe@huawei.com> <20220530113016.16663-2-linmiaohe@huawei.com> Content-Type: text/plain; charset="UTF-8" User-Agent: Evolution 3.38.3-1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-2.5 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RDNS_NONE,SPF_HELO_NONE,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, 2022-05-30 at 19:30 +0800, Miaohe Lin wrote: > Commit 3268c63eded4 ("mm: fix move/migrate_pages() race on task struct") > extends the period of the rcu_read_lock until after the permissions checks > are done to prevent the task pointed to from changing from under us. But > the task_struct refcount is also taken at that time, the reference to task > is guaranteed to be stable. So it's unnecessary to extend the period of > the rcu_read_lock. Release the rcu lock after task refcount is successfully > grabbed to reduce the rcu holding time. Sorry for late reply, I am busy on something else recently. I have just read the whole thread of the original patch discussion. During discussion, in https://lore.kernel.org/lkml/alpine.DEB.2.00.1202241131400.3726@router.home/ a patch that is same as your one is proposed. Then in the following message, Eric think that the rcu read lock should be released until permission is checked, https://lore.kernel.org/lkml/87sjhzun47.fsf@xmission.com/ " At the moment I suspect the permissions checks are not safe unless performed under both rcu_read_lock and task_lock to ensure that the task<->mm association does not change on us while we are working. Even with that the cred can change under us but at least we know the cred will be valid until rcu_read_unlock happens. " So the rcu lock duration is enlarged in the following message. https://lore.kernel.org/lkml/alpine.DEB.2.00.1202271238450.32410@router.home/ But, after some thought, I don't think extended rcu read lock adds much value. Because after permission checking the permission may still be changed. There's no much difference. So, I have no objection to the patch itself. But you should add more information in patch description about why the RCU proected region is extended and why we can reduce it. Best Regards, Huang, Ying > Reviewed-by: Muchun Song > Reviewed-by: Christoph Hellwig > Reviewed-by: Oscar Salvador > Signed-off-by: Miaohe Lin > Cc: Huang Ying > Cc: David Howells > Cc: Christoph Lameter > --- >  mm/mempolicy.c | 3 +-- >  mm/migrate.c | 3 +-- >  2 files changed, 2 insertions(+), 4 deletions(-) > > diff --git a/mm/mempolicy.c b/mm/mempolicy.c > index 0b4ba3ee810e..2dad094177bf 100644 > --- a/mm/mempolicy.c > +++ b/mm/mempolicy.c > @@ -1609,6 +1609,7 @@ static int kernel_migrate_pages(pid_t pid, unsigned long maxnode, >   goto out; >   } >   get_task_struct(task); > + rcu_read_unlock(); >   > > > >   err = -EINVAL; >   > > > > @@ -1617,11 +1618,9 @@ static int kernel_migrate_pages(pid_t pid, unsigned long maxnode, >   * Use the regular "ptrace_may_access()" checks. >   */ >   if (!ptrace_may_access(task, PTRACE_MODE_READ_REALCREDS)) { > - rcu_read_unlock(); >   err = -EPERM; >   goto out_put; >   } > - rcu_read_unlock(); >   > > > >   task_nodes = cpuset_mems_allowed(task); >   /* Is the user allowed to access the target nodes? */ > diff --git a/mm/migrate.c b/mm/migrate.c > index e51588e95f57..e88ebb88fa6f 100644 > --- a/mm/migrate.c > +++ b/mm/migrate.c > @@ -1902,17 +1902,16 @@ static struct mm_struct *find_mm_struct(pid_t pid, nodemask_t *mem_nodes) >   return ERR_PTR(-ESRCH); >   } >   get_task_struct(task); > + rcu_read_unlock(); >   > > > >   /* >   * Check if this process has the right to modify the specified >   * process. Use the regular "ptrace_may_access()" checks. >   */ >   if (!ptrace_may_access(task, PTRACE_MODE_READ_REALCREDS)) { > - rcu_read_unlock(); >   mm = ERR_PTR(-EPERM); >   goto out; >   } > - rcu_read_unlock(); >   > > > >   mm = ERR_PTR(security_task_movememory(task)); >   if (IS_ERR(mm))