Received: by 2002:a25:c205:0:0:0:0:0 with SMTP id s5csp1122117ybf; Fri, 28 Feb 2020 14:41:44 -0800 (PST) X-Google-Smtp-Source: APXvYqy1m4gSAz/hO35vGDi8KR1qbt3VH0j1xk+mqe3R6Dkh6kp9NDWyxab/Bky1cO1k7Lgx5yzW X-Received: by 2002:a05:6830:1353:: with SMTP id r19mr5128852otq.288.1582929704112; Fri, 28 Feb 2020 14:41:44 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1582929704; cv=none; d=google.com; s=arc-20160816; b=SOn8M9MVE7vL8cP9vBJ7NJ+51RpPuvUGbIOFWtHd6sFwLjdzIaN1pC5Ou0yKRr/nX7 HY6iOgqHPnAmXXZDpaxth/bbIvn9mgY7Yz2Rg23pUiWXIvi4puRqT0ucVFKURJ1s7+Qz Xcz1Uq4Cdb7sVNbTtspYyK5x955+y9Yuaxm4FjRqOY8nmlTC9IPfxKVG5GZ2dkiTs6Dk Z6ISXDIT5FQVcHOYfoF9fxGHcqmFH8o7Vli8yCTTmqtjhhkaKH2eTtH2zMC2/Okf3yRa 3AgcW7lGCa34+yssxGlCxRx28isVSzxfmMnTVkTDsGEbCzu9aJ/BEqGElK71L2gnG3pa 2eRQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=x9BTwZzXxDzrVF6UcyviikLcydQEHUNnudxLaL8uKts=; b=iW5+ymfyc0phrgQC4B1amD4VDTlu23e+rRspeI76UDJOz0Zkrzshs00X9/nJN3MSQm 7sSmZ0XCfUK1N+WSi3rr5RIUNh0V+PLrsNvaKBCcDxSrhxFND3jbxjXTpsdeVqKhvLxA 5HCW3j4WTLX3COfjyU0I7NUELKKF45EYus80P6VVvvSruVODQzT+bVX5BpLpiAXCDgR2 B1h5yzNt9YLnuhh43yeD4FBPNeJ3piHdl8eeCdkG6CwMq1bzVD8kJboD1aPGyiONfRq8 4ypQmc1UqaQXlf2pofKy9X0sh2YTnp0Vgbx266d42/nu9ZViZ17zxT6SsGT8mQxsSCV/ iwsg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b="od+LBP/b"; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 104si2250401otj.252.2020.02.28.14.41.31; Fri, 28 Feb 2020 14:41:44 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b="od+LBP/b"; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726824AbgB1WlU (ORCPT + 99 others); Fri, 28 Feb 2020 17:41:20 -0500 Received: from mail-vs1-f66.google.com ([209.85.217.66]:35903 "EHLO mail-vs1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726627AbgB1WlU (ORCPT ); Fri, 28 Feb 2020 17:41:20 -0500 Received: by mail-vs1-f66.google.com with SMTP id a2so3017280vso.3 for ; Fri, 28 Feb 2020 14:41:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=x9BTwZzXxDzrVF6UcyviikLcydQEHUNnudxLaL8uKts=; b=od+LBP/b8AMnzHYGyWOnh67HAS41CcWjLjL6lDYC0IPO5w9Y+65KibixkdjVm0Jyki jrMHaWIyTGMm7MfEZ5ojgmzD5FeHRS9dd46zT+Ma7W2AF0oPG/ZHVQZRQxf6W3V9JK6f RQ5AsX8F6clUzPqYCRUBczsZwgMk9yTKJfVJceHfV1xz5qR0gcIJwKmKoV/ixJCTx48b wbpAdqCb2dN5Eh4Z7DSEND//LSvQvYYMbyTSJt7FS3pgkGluUF8htfuFhoBJxB9bxNoo sFoX/jxeHVnTHZtOsOUP8ifNUgMLgoB7PpK98WxIODlBHfQ5cfxISbjpF1d9HsbWKSeG 4Mqw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=x9BTwZzXxDzrVF6UcyviikLcydQEHUNnudxLaL8uKts=; b=V9SCNdUE14oRAUDwiD15GtjZyVP4vH27y6lZEIoxE33pNOGSy3r6MbRhVXhw6Es+z7 Z9QOP1tidiJ8nZazAdJcfROdmzQaBX7XgX4dL5X9BU9BFJt/1H5wUbTQRz85p+wdkmzd fiPMnYQcnFpBvrVht4l3kD9OQvxGiqB/qPfeMQ0mmy8dN/LUdC2KPt+jQM+qp1ooTnAn Vs2A0BYEp0zxC5Y+SAjQGSZZE84VlcwI2p3tcBJN7SzOAIW57El1tPGpafu/Ecu9JPme ola45tsERXc1pfNXQCBtiZoGlQx3h4kMF7IFgij287N55o/kKwV9KDc2CAHYMTSiM3XB qEKg== X-Gm-Message-State: ANhLgQ3Heaxl1DQCxS7WZFncrNa6E/viFBmtVTFjKk07mwhOfkghk07C E7AB+M3qtJgnAMYNz+fCzYwtv6xpkJz40Y8l774LIg== X-Received: by 2002:a05:6102:303a:: with SMTP id v26mr4021916vsa.119.1582929678413; Fri, 28 Feb 2020 14:41:18 -0800 (PST) MIME-Version: 1.0 References: <20200219014433.88424-1-minchan@kernel.org> <20200219014433.88424-6-minchan@kernel.org> In-Reply-To: <20200219014433.88424-6-minchan@kernel.org> From: Suren Baghdasaryan Date: Fri, 28 Feb 2020 14:41:07 -0800 Message-ID: Subject: Re: [PATCH v6 5/7] mm: support both pid and pidfd for process_madvise To: Minchan Kim Cc: Andrew Morton , LKML , linux-mm , linux-api@vger.kernel.org, oleksandr@redhat.com, Tim Murray , Daniel Colascione , Sandeep Patil , Sonny Rao , Brian Geffon , Michal Hocko , Johannes Weiner , Shakeel Butt , John Dias , Joel Fernandes , sj38.park@gmail.com, alexander.h.duyck@linux.intel.com, Jann Horn , Christian Brauner , Kirill Tkhai Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Feb 18, 2020 at 5:44 PM Minchan Kim wrote: > > There is a demand[1] to support pid as well pidfd for process_madvise > to reduce unnecessary syscall to get pidfd if the user has control of > the target process(ie, they could guarantee the process is not gone > or pid is not reused. Or, it might be okay to give a hint to wrong > process). nit: When would "give a hint to wrong process" be ok? I would just remove this part. > > This patch aims for supporting both options like waitid(2). So, the > syscall is currently, > > int process_madvise(int which, pid_t pid, void *addr, > size_t length, int advise, unsigned long flag); > > @which is actually idtype_t for userspace libray and currently, > it supports P_PID and P_PIDFD. > > [1] https://lore.kernel.org/linux-mm/9d849087-3359-c4ab-fbec-859e8186c509@virtuozzo.com/ > > Cc: Christian Brauner > Suggested-by: Kirill Tkhai > Signed-off-by: Minchan Kim > --- > include/linux/syscalls.h | 3 ++- > mm/madvise.c | 34 ++++++++++++++++++++++------------ > 2 files changed, 24 insertions(+), 13 deletions(-) > > diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h > index e4cd2c2f8bb4..f5ada20e2943 100644 > --- a/include/linux/syscalls.h > +++ b/include/linux/syscalls.h > @@ -876,7 +876,8 @@ asmlinkage long sys_munlockall(void); > asmlinkage long sys_mincore(unsigned long start, size_t len, > unsigned char __user * vec); > asmlinkage long sys_madvise(unsigned long start, size_t len, int behavior); > -asmlinkage long sys_process_madvise(int pidfd, unsigned long start, > + > +asmlinkage long sys_process_madvise(int which, pid_t pid, unsigned long start, > size_t len, int behavior, unsigned long flags); > asmlinkage long sys_remap_file_pages(unsigned long start, unsigned long size, > unsigned long prot, unsigned long pgoff, > diff --git a/mm/madvise.c b/mm/madvise.c > index def1507c2030..f6d9b9e66243 100644 > --- a/mm/madvise.c > +++ b/mm/madvise.c > @@ -1182,11 +1182,10 @@ SYSCALL_DEFINE3(madvise, unsigned long, start, size_t, len_in, int, behavior) > return do_madvise(current, current->mm, start, len_in, behavior); > } > > -SYSCALL_DEFINE5(process_madvise, int, pidfd, unsigned long, start, > +SYSCALL_DEFINE6(process_madvise, int, which, pid_t, upid, unsigned long, start, > size_t, len_in, int, behavior, unsigned long, flags) > { > int ret; > - struct fd f; > struct pid *pid; > struct task_struct *task; > struct mm_struct *mm; > @@ -1197,20 +1196,31 @@ SYSCALL_DEFINE5(process_madvise, int, pidfd, unsigned long, start, > if (!process_madvise_behavior_valid(behavior)) > return -EINVAL; > > - f = fdget(pidfd); > - if (!f.file) > - return -EBADF; > + switch (which) { > + case P_PID: > + if (upid <= 0) > + return -EINVAL; > + > + pid = find_get_pid(upid); > + if (!pid) > + return -ESRCH; > + break; > + case P_PIDFD: > + if (upid < 0) > + return -EINVAL; > > - pid = pidfd_pid(f.file); > - if (IS_ERR(pid)) { > - ret = PTR_ERR(pid); > - goto fdput; > + pid = pidfd_get_pid(upid); > + if (IS_ERR(pid)) > + return PTR_ERR(pid); > + break; > + default: > + return -EINVAL; > } > > task = get_pid_task(pid, PIDTYPE_PID); > if (!task) { > ret = -ESRCH; > - goto fdput; > + goto put_pid; > } > > mm = mm_access(task, PTRACE_MODE_ATTACH_FSCREDS); > @@ -1223,7 +1233,7 @@ SYSCALL_DEFINE5(process_madvise, int, pidfd, unsigned long, start, > mmput(mm); > release_task: > put_task_struct(task); > -fdput: > - fdput(f); > +put_pid: > + put_pid(pid); > return ret; > } > -- > 2.25.0.265.gbab2e86ba0-goog > Reviewed-by: Suren Baghdasaryan