]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
mm: migrate: simplify find_mm_struct()
authorNanyong Sun <sunnanyong@huawei.com>
Thu, 5 Sep 2024 15:31:18 +0000 (23:31 +0800)
committerAndrew Morton <akpm@linux-foundation.org>
Mon, 9 Sep 2024 23:39:14 +0000 (16:39 -0700)
Use find_get_task_by_vpid() to replace the task_struct find logic in
find_mm_struct(), note that this patch move the ptrace_may_access() call
out from rcu_read_lock() scope, this is ok because it actually does not
need it, find_get_task_by_vpid() already get the pid and task safely,
ptrace_may_access() can use the task safely, like what
sched_core_share_pid() similarly do.

Link: https://lkml.kernel.org/r/20240905153118.1205173-1-sunnanyong@huawei.com
Signed-off-by: Nanyong Sun <sunnanyong@huawei.com>
Cc: Kefeng Wang <wangkefeng.wang@huawei.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
mm/migrate.c

index 35cc9d35064b0a78b7456c34dfc1a6972bc5950c..6a68d9923820b813575b1da9f0342d179d66b6ac 100644 (file)
@@ -2505,25 +2505,19 @@ static struct mm_struct *find_mm_struct(pid_t pid, nodemask_t *mem_nodes)
                return current->mm;
        }
 
-       /* Find the mm_struct */
-       rcu_read_lock();
-       task = find_task_by_vpid(pid);
+       task = find_get_task_by_vpid(pid);
        if (!task) {
-               rcu_read_unlock();
                return ERR_PTR(-ESRCH);
        }
-       get_task_struct(task);
 
        /*
         * 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))