From mboxrd@z Thu Jan 1 00:00:00 1970 From: Christian Brauner Subject: Re: [PATCH 1/2] pid: add pidfd_open() Date: Wed, 15 May 2019 16:16:35 +0200 Message-ID: <20190515141634.lrc5ynllcmjr64mn@brauner.io> References: <20190515100400.3450-1-christian@brauner.io> <4c5ae46657e1931a832def5645db61eb0bf1accd.camel@opteya.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <4c5ae46657e1931a832def5645db61eb0bf1accd.camel@opteya.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=m.gmane.org@lists.infradead.org To: Yann Droneaud Cc: linux-ia64@vger.kernel.org, linux-sh@vger.kernel.org, linux-kernel@vger.kernel.org, dhowells@redhat.com, linux-kselftest@vger.kernel.org, sparclinux@vger.kernel.org, linux-api@vger.kernel.org, elena.reshetova@intel.com, linux-arch@vger.kernel.org, linux-s390@vger.kernel.org, linux-xtensa@linux-xtensa.org, keescook@chromium.org, arnd@arndb.de, jannh@google.com, linux-m68k@lists.linux-m68k.org, viro@zeniv.linux.org.uk, luto@kernel.org, oleg@redhat.com, tglx@linutronix.de, linux-arm-kernel@lists.infradead.org, linux-parisc@vger.kernel.org, cyphar@cyphar.com, torvalds@linux-foundation.org, linux-mips@vger.kernel.org, luto@amacapital.net, ebiederm@xmission.com, linux-alpha@vger.kernel.org, akpm@linux-foundation.org, linuxppc-dev@lists.ozlabs.org List-Id: linux-arch.vger.kernel.org T24gV2VkLCBNYXkgMTUsIDIwMTkgYXQgMDQ6MDA6MjBQTSArMDIwMCwgWWFubiBEcm9uZWF1ZCB3 cm90ZToKPiBIaSwKPiAKPiBMZSBtZXJjcmVkaSAxNSBtYWkgMjAxOSDDoCAxMjowMyArMDIwMCwg Q2hyaXN0aWFuIEJyYXVuZXIgYSDDqWNyaXQgOgo+ID4gCj4gPiBkaWZmIC0tZ2l0IGEva2VybmVs L3BpZC5jIGIva2VybmVsL3BpZC5jCj4gPiBpbmRleCAyMDg4MTU5OGJkZmEuLjIzN2QxOGQ2ZWNi OCAxMDA2NDQKPiA+IC0tLSBhL2tlcm5lbC9waWQuYwo+ID4gKysrIGIva2VybmVsL3BpZC5jCj4g PiBAQCAtNDUxLDYgKzQ1Miw1MyBAQCBzdHJ1Y3QgcGlkICpmaW5kX2dlX3BpZChpbnQgbnIsIHN0 cnVjdAo+ID4gcGlkX25hbWVzcGFjZSAqbnMpCj4gPiAgCXJldHVybiBpZHJfZ2V0X25leHQoJm5z LT5pZHIsICZucik7Cj4gPiAgfQo+ID4gIAo+ID4gKy8qKgo+ID4gKyAqIHBpZGZkX29wZW4oKSAt IE9wZW4gbmV3IHBpZCBmaWxlIGRlc2NyaXB0b3IuCj4gPiArICoKPiA+ICsgKiBAcGlkOiAgIHBp ZCBmb3Igd2hpY2ggdG8gcmV0cmlldmUgYSBwaWRmZAo+ID4gKyAqIEBmbGFnczogZmxhZ3MgdG8g cGFzcwo+ID4gKyAqCj4gPiArICogVGhpcyBjcmVhdGVzIGEgbmV3IHBpZCBmaWxlIGRlc2NyaXB0 b3Igd2l0aCB0aGUgT19DTE9FWEVDIGZsYWcgc2V0IGZvcgo+ID4gKyAqIHRoZSBwcm9jZXNzIGlk ZW50aWZpZWQgYnkgQHBpZC4gQ3VycmVudGx5LCB0aGUgcHJvY2VzcyBpZGVudGlmaWVkIGJ5Cj4g PiArICogQHBpZCBtdXN0IGJlIGEgdGhyZWFkLWdyb3VwIGxlYWRlci4gVGhpcyByZXN0cmljdGlv biBjdXJyZW50bHkgZXhpc3RzCj4gPiArICogZm9yIGFsbCBhc3BlY3RzIG9mIHBpZGZkcyBpbmNs dWRpbmcgcGlkZmQgY3JlYXRpb24gKENMT05FX1BJREZEIGNhbm5vdAo+ID4gKyAqIGJlIHVzZWQg d2l0aCBDTE9ORV9USFJFQUQpIGFuZCBwaWRmZCBwb2xsaW5nIChvbmx5IHN1cHBvcnRzIHRocmVh ZCBncm91cAo+ID4gKyAqIGxlYWRlcnMpLgo+ID4gKyAqCj4gCj4gV291bGQgaXQgYmUgcG9zc2li bGUgdG8gY3JlYXRlIGZpbGUgZGVzY3JpcHRvciB3aXRoICJyZXN0cmljdGVkIgo+IG9wZXJhdGlv biA/Cj4gCj4gLSBPX1JET05MWTogd2FpdGluZyBmb3IgcHJvY2VzcyBjb21wbGV0aW9uIGFsbG93 ZWQgKGZvciBleGFtcGxlKQo+IC0gT19XUk9OTFk6IHNlbmRpbmcgcHJvY2VzcyBzaWduYWwgYWxs b3dlZAoKWWVzLCBzb21ldGhpbmcgbGlrZSB0aGlzIGlzIGxpa2VseSBnb2luZyB0byBiZSBwb3Nz aWJsZSBpbiB0aGUgZnV0dXJlLgpXZSBoYWQgZGlzY3Vzc2lvbiBhcm91bmQgdGhpcy4gQnV0IG1h cHBpbmcgdGhpcyB0byBPX1JET05MWSBhbmQgT19XUk9OTFkKaXMgbm90IHRoZSByaWdodCBtb2Rl bC4gSXQgbWFrZXMgbW9yZSBzZW5zZSB0byBoYXZlIHNwZWNpYWxpemVkIGZsYWdzCnRoYXQgcmVz dHJpY3QgYWN0aW9ucy4KCj4gCj4gRm9yIGV4YW1wbGUsIGEgcHJvY2VzcyBjb3VsZCBzZW5kIG92 ZXIgYSBVbml4IHNvY2tldCBhIHByb2Nlc3MgYSBwaWRmZCwKPiBhbGxvd2luZyB0aGlzIHRvIG9u bHkgd2FpdCBmb3IgY29tcGxldGlvbiwgYnV0IG5vdCBzZW5kaW5nIHNpZ25hbCA/Cj4gCj4gSSBz ZWUgdGhlIHBlcm1pc3Npb24gY2hlY2sgaXMgbm90IGRvbmUgaW4gcGlkZmRfb3BlbigpLCBzbyB3 aGF0IHByZXZlbnQKPiBhIHVzZXIgZnJvbSBzZW5kaW5nIGEgc2lnbmFsIHRvIGFub3RoZXIgdXNl ciBvd25lZCBwcm9jZXNzID8KClRoYXQncyBzdXBwb3NlZCB0byBiZSBwb3NzaWJsZS4gWW91IGNh biBkbyB0aGUgc2FtZSByaWdodCBub3cgYWxyZWFkeQp3aXRoIHBpZHMuIFRvb2xzIGxpa2UgTE1L IG5lZWQgdGhpcyBwcm9iYWJseSB2ZXJ5IG11Y2guClBlcm1pc3Npb24gY2hlY2tpbmcgZm9yIHNp Z25hbHMgaXMgZG9uZSBhdCBzZW5kIHRpbWUgcmlnaHQgbm93LgpBbmQgaWYgeW91IGNhbid0IHNp Z25hbCB2aWEgYSBwaWQgeW91IGNhbid0IHNpZ25hbCB2aWEgYSBwaWRmZCBhcwp0aGV5J3JlIGJv dGggc3ViamVjdCB0byB0aGUgc2FtZSBwZXJtaXNzaW9ucyBjaGVja3MuCgo+IAo+IElmIGl0J3Mg aW4gcGlkZmRfc2VuZF9zaWduYWwoKSwgdGhlbiwgcGFzc2luZyB0aGUgc29ja2V0IHRocm91Z2gK PiBTQ01fUklHSFQgd29uJ3QgYmUgdXNlZnVsIGlmIHRoZSB0YXJnZXQgcHJvY2VzcyBpcyBub3Qg b3duZWQgYnkgdGhlCj4gc2FtZSB1c2VyLCBvciByb290Lgo+IAo+ID4gKyAqIFJldHVybjogT24g c3VjY2VzcywgYSBjbG9leGVjIHBpZGZkIGlzIHJldHVybmVkLgo+ID4gKyAqICAgICAgICAgT24g ZXJyb3IsIGEgbmVnYXRpdmUgZXJybm8gbnVtYmVyIHdpbGwgYmUgcmV0dXJuZWQuCj4gPiArICov Cj4gPiArU1lTQ0FMTF9ERUZJTkUyKHBpZGZkX29wZW4sIHBpZF90LCBwaWQsIHVuc2lnbmVkIGlu dCwgZmxhZ3MpCj4gPiArewo+ID4gKwlpbnQgZmQsIHJldDsKPiA+ICsJc3RydWN0IHBpZCAqcDsK PiA+ICsJc3RydWN0IHRhc2tfc3RydWN0ICp0c2s7Cj4gPiArCj4gPiArCWlmIChmbGFncykKPiA+ ICsJCXJldHVybiAtRUlOVkFMOwo+ID4gKwo+ID4gKwlpZiAocGlkIDw9IDApCj4gPiArCQlyZXR1 cm4gLUVJTlZBTDsKPiA+ICsKPiA+ICsJcCA9IGZpbmRfZ2V0X3BpZChwaWQpOwo+ID4gKwlpZiAo IXApCj4gPiArCQlyZXR1cm4gLUVTUkNIOwo+ID4gKwo+ID4gKwlyY3VfcmVhZF9sb2NrKCk7Cj4g PiArCXRzayA9IHBpZF90YXNrKHAsIFBJRFRZUEVfUElEKTsKPiA+ICsJaWYgKCF0c2spCj4gPiAr CQlyZXQgPSAtRVNSQ0g7Cj4gPiArCWVsc2UgaWYgKHVubGlrZWx5KCF0aHJlYWRfZ3JvdXBfbGVh ZGVyKHRzaykpKQo+ID4gKwkJcmV0ID0gLUVJTlZBTDsKPiA+ICsJZWxzZQo+ID4gKwkJcmV0ID0g MDsKPiA+ICsJcmN1X3JlYWRfdW5sb2NrKCk7Cj4gPiArCj4gPiArCWZkID0gcmV0ID86IHBpZGZk X2NyZWF0ZShwKTsKPiA+ICsJcHV0X3BpZChwKTsKPiA+ICsJcmV0dXJuIGZkOwo+ID4gK30KPiA+ ICsKPiA+ICB2b2lkIF9faW5pdCBwaWRfaWRyX2luaXQodm9pZCkKPiA+ICB7Cj4gPiAgCS8qIFZl cmlmeSBubyBvbmUgaGFzIGRvbmUgYW55dGhpbmcgc2lsbHk6ICovCj4gCj4gUmVnYXJkcy4KPiAK PiAtLSAKPiBZYW5uIERyb25lYXVkCj4gT1BURVlBCj4gCj4gCgpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlz dApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJh ZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ed1-f66.google.com ([209.85.208.66]:45893 "EHLO mail-ed1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727849AbfEOOQk (ORCPT ); Wed, 15 May 2019 10:16:40 -0400 Received: by mail-ed1-f66.google.com with SMTP id g57so4288615edc.12 for ; Wed, 15 May 2019 07:16:38 -0700 (PDT) Date: Wed, 15 May 2019 16:16:35 +0200 From: Christian Brauner Subject: Re: [PATCH 1/2] pid: add pidfd_open() Message-ID: <20190515141634.lrc5ynllcmjr64mn@brauner.io> References: <20190515100400.3450-1-christian@brauner.io> <4c5ae46657e1931a832def5645db61eb0bf1accd.camel@opteya.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <4c5ae46657e1931a832def5645db61eb0bf1accd.camel@opteya.com> Sender: linux-arch-owner@vger.kernel.org List-ID: To: Yann Droneaud Cc: jannh@google.com, oleg@redhat.com, viro@zeniv.linux.org.uk, torvalds@linux-foundation.org, linux-kernel@vger.kernel.org, arnd@arndb.de, dhowells@redhat.com, akpm@linux-foundation.org, cyphar@cyphar.com, ebiederm@xmission.com, elena.reshetova@intel.com, keescook@chromium.org, luto@amacapital.net, luto@kernel.org, tglx@linutronix.de, linux-alpha@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-ia64@vger.kernel.org, linux-m68k@lists.linux-m68k.org, linux-mips@vger.kernel.org, linux-parisc@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-s390@vger.kernel.org, linux-sh@vger.kernel.org, sparclinux@vger.kernel.org, linux-xtensa@linux-xtensa.org, linux-api@vger.kernel.org, linux-arch@vger.kernel.org, linux-kselftest@vger.kernel.org Message-ID: <20190515141635.ayXWmhd6x-uyiACl3yE0jnoeOaN-nVeK__Opc6aCyAk@z> On Wed, May 15, 2019 at 04:00:20PM +0200, Yann Droneaud wrote: > Hi, > > Le mercredi 15 mai 2019 à 12:03 +0200, Christian Brauner a écrit : > > > > diff --git a/kernel/pid.c b/kernel/pid.c > > index 20881598bdfa..237d18d6ecb8 100644 > > --- a/kernel/pid.c > > +++ b/kernel/pid.c > > @@ -451,6 +452,53 @@ struct pid *find_ge_pid(int nr, struct > > pid_namespace *ns) > > return idr_get_next(&ns->idr, &nr); > > } > > > > +/** > > + * pidfd_open() - Open new pid file descriptor. > > + * > > + * @pid: pid for which to retrieve a pidfd > > + * @flags: flags to pass > > + * > > + * This creates a new pid file descriptor with the O_CLOEXEC flag set for > > + * the process identified by @pid. Currently, the process identified by > > + * @pid must be a thread-group leader. This restriction currently exists > > + * for all aspects of pidfds including pidfd creation (CLONE_PIDFD cannot > > + * be used with CLONE_THREAD) and pidfd polling (only supports thread group > > + * leaders). > > + * > > Would it be possible to create file descriptor with "restricted" > operation ? > > - O_RDONLY: waiting for process completion allowed (for example) > - O_WRONLY: sending process signal allowed Yes, something like this is likely going to be possible in the future. We had discussion around this. But mapping this to O_RDONLY and O_WRONLY is not the right model. It makes more sense to have specialized flags that restrict actions. > > For example, a process could send over a Unix socket a process a pidfd, > allowing this to only wait for completion, but not sending signal ? > > I see the permission check is not done in pidfd_open(), so what prevent > a user from sending a signal to another user owned process ? That's supposed to be possible. You can do the same right now already with pids. Tools like LMK need this probably very much. Permission checking for signals is done at send time right now. And if you can't signal via a pid you can't signal via a pidfd as they're both subject to the same permissions checks. > > If it's in pidfd_send_signal(), then, passing the socket through > SCM_RIGHT won't be useful if the target process is not owned by the > same user, or root. > > > + * Return: On success, a cloexec pidfd is returned. > > + * On error, a negative errno number will be returned. > > + */ > > +SYSCALL_DEFINE2(pidfd_open, pid_t, pid, unsigned int, flags) > > +{ > > + int fd, ret; > > + struct pid *p; > > + struct task_struct *tsk; > > + > > + if (flags) > > + return -EINVAL; > > + > > + if (pid <= 0) > > + return -EINVAL; > > + > > + p = find_get_pid(pid); > > + if (!p) > > + return -ESRCH; > > + > > + rcu_read_lock(); > > + tsk = pid_task(p, PIDTYPE_PID); > > + if (!tsk) > > + ret = -ESRCH; > > + else if (unlikely(!thread_group_leader(tsk))) > > + ret = -EINVAL; > > + else > > + ret = 0; > > + rcu_read_unlock(); > > + > > + fd = ret ?: pidfd_create(p); > > + put_pid(p); > > + return fd; > > +} > > + > > void __init pid_idr_init(void) > > { > > /* Verify no one has done anything silly: */ > > Regards. > > -- > Yann Droneaud > OPTEYA > >