From mboxrd@z Thu Jan 1 00:00:00 1970 From: Yann Droneaud Subject: Re: [PATCH 1/2] pid: add pidfd_open() Date: Wed, 15 May 2019 16:00:20 +0200 Message-ID: <4c5ae46657e1931a832def5645db61eb0bf1accd.camel@opteya.com> References: <20190515100400.3450-1-christian@brauner.io> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20190515100400.3450-1-christian@brauner.io> 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: Christian Brauner , 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 Cc: linux-ia64@vger.kernel.org, linux-sh@vger.kernel.org, linux-mips@vger.kernel.org, linux-kselftest@vger.kernel.org, sparclinux@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, linux-m68k@lists.linux-m68k.org, luto@kernel.org, tglx@linutronix.de, linux-arm-kernel@lists.infradead.org, linux-parisc@vger.kernel.org, linux-api@vger.kernel.org, cyphar@cyphar.com, 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 SGksCgpMZSBtZXJjcmVkaSAxNSBtYWkgMjAxOSDDoCAxMjowMyArMDIwMCwgQ2hyaXN0aWFuIEJy YXVuZXIgYSDDqWNyaXQgOgo+IAo+IGRpZmYgLS1naXQgYS9rZXJuZWwvcGlkLmMgYi9rZXJuZWwv cGlkLmMKPiBpbmRleCAyMDg4MTU5OGJkZmEuLjIzN2QxOGQ2ZWNiOCAxMDA2NDQKPiAtLS0gYS9r ZXJuZWwvcGlkLmMKPiArKysgYi9rZXJuZWwvcGlkLmMKPiBAQCAtNDUxLDYgKzQ1Miw1MyBAQCBz dHJ1Y3QgcGlkICpmaW5kX2dlX3BpZChpbnQgbnIsIHN0cnVjdAo+IHBpZF9uYW1lc3BhY2UgKm5z KQo+ICAJcmV0dXJuIGlkcl9nZXRfbmV4dCgmbnMtPmlkciwgJm5yKTsKPiAgfQo+ICAKPiArLyoq Cj4gKyAqIHBpZGZkX29wZW4oKSAtIE9wZW4gbmV3IHBpZCBmaWxlIGRlc2NyaXB0b3IuCj4gKyAq Cj4gKyAqIEBwaWQ6ICAgcGlkIGZvciB3aGljaCB0byByZXRyaWV2ZSBhIHBpZGZkCj4gKyAqIEBm bGFnczogZmxhZ3MgdG8gcGFzcwo+ICsgKgo+ICsgKiBUaGlzIGNyZWF0ZXMgYSBuZXcgcGlkIGZp bGUgZGVzY3JpcHRvciB3aXRoIHRoZSBPX0NMT0VYRUMgZmxhZyBzZXQgZm9yCj4gKyAqIHRoZSBw cm9jZXNzIGlkZW50aWZpZWQgYnkgQHBpZC4gQ3VycmVudGx5LCB0aGUgcHJvY2VzcyBpZGVudGlm aWVkIGJ5Cj4gKyAqIEBwaWQgbXVzdCBiZSBhIHRocmVhZC1ncm91cCBsZWFkZXIuIFRoaXMgcmVz dHJpY3Rpb24gY3VycmVudGx5IGV4aXN0cwo+ICsgKiBmb3IgYWxsIGFzcGVjdHMgb2YgcGlkZmRz IGluY2x1ZGluZyBwaWRmZCBjcmVhdGlvbiAoQ0xPTkVfUElERkQgY2Fubm90Cj4gKyAqIGJlIHVz ZWQgd2l0aCBDTE9ORV9USFJFQUQpIGFuZCBwaWRmZCBwb2xsaW5nIChvbmx5IHN1cHBvcnRzIHRo cmVhZCBncm91cAo+ICsgKiBsZWFkZXJzKS4KPiArICoKCldvdWxkIGl0IGJlIHBvc3NpYmxlIHRv IGNyZWF0ZSBmaWxlIGRlc2NyaXB0b3Igd2l0aCAicmVzdHJpY3RlZCIKb3BlcmF0aW9uID8KCi0g T19SRE9OTFk6IHdhaXRpbmcgZm9yIHByb2Nlc3MgY29tcGxldGlvbiBhbGxvd2VkIChmb3IgZXhh bXBsZSkKLSBPX1dST05MWTogc2VuZGluZyBwcm9jZXNzIHNpZ25hbCBhbGxvd2VkCgpGb3IgZXhh bXBsZSwgYSBwcm9jZXNzIGNvdWxkIHNlbmQgb3ZlciBhIFVuaXggc29ja2V0IGEgcHJvY2VzcyBh IHBpZGZkLAphbGxvd2luZyB0aGlzIHRvIG9ubHkgd2FpdCBmb3IgY29tcGxldGlvbiwgYnV0IG5v dCBzZW5kaW5nIHNpZ25hbCA/CgpJIHNlZSB0aGUgcGVybWlzc2lvbiBjaGVjayBpcyBub3QgZG9u ZSBpbiBwaWRmZF9vcGVuKCksIHNvIHdoYXQgcHJldmVudAphIHVzZXIgZnJvbSBzZW5kaW5nIGEg c2lnbmFsIHRvIGFub3RoZXIgdXNlciBvd25lZCBwcm9jZXNzID8KCklmIGl0J3MgaW4gcGlkZmRf c2VuZF9zaWduYWwoKSwgdGhlbiwgcGFzc2luZyB0aGUgc29ja2V0IHRocm91Z2gKU0NNX1JJR0hU IHdvbid0IGJlIHVzZWZ1bCBpZiB0aGUgdGFyZ2V0IHByb2Nlc3MgaXMgbm90IG93bmVkIGJ5IHRo ZQpzYW1lIHVzZXIsIG9yIHJvb3QuCgo+ICsgKiBSZXR1cm46IE9uIHN1Y2Nlc3MsIGEgY2xvZXhl YyBwaWRmZCBpcyByZXR1cm5lZC4KPiArICogICAgICAgICBPbiBlcnJvciwgYSBuZWdhdGl2ZSBl cnJubyBudW1iZXIgd2lsbCBiZSByZXR1cm5lZC4KPiArICovCj4gK1NZU0NBTExfREVGSU5FMihw aWRmZF9vcGVuLCBwaWRfdCwgcGlkLCB1bnNpZ25lZCBpbnQsIGZsYWdzKQo+ICt7Cj4gKwlpbnQg ZmQsIHJldDsKPiArCXN0cnVjdCBwaWQgKnA7Cj4gKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzazsK PiArCj4gKwlpZiAoZmxhZ3MpCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsJaWYgKHBpZCA8 PSAwKQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiArCXAgPSBmaW5kX2dldF9waWQocGlkKTsK PiArCWlmICghcCkKPiArCQlyZXR1cm4gLUVTUkNIOwo+ICsKPiArCXJjdV9yZWFkX2xvY2soKTsK PiArCXRzayA9IHBpZF90YXNrKHAsIFBJRFRZUEVfUElEKTsKPiArCWlmICghdHNrKQo+ICsJCXJl dCA9IC1FU1JDSDsKPiArCWVsc2UgaWYgKHVubGlrZWx5KCF0aHJlYWRfZ3JvdXBfbGVhZGVyKHRz aykpKQo+ICsJCXJldCA9IC1FSU5WQUw7Cj4gKwllbHNlCj4gKwkJcmV0ID0gMDsKPiArCXJjdV9y ZWFkX3VubG9jaygpOwo+ICsKPiArCWZkID0gcmV0ID86IHBpZGZkX2NyZWF0ZShwKTsKPiArCXB1 dF9waWQocCk7Cj4gKwlyZXR1cm4gZmQ7Cj4gK30KPiArCj4gIHZvaWQgX19pbml0IHBpZF9pZHJf aW5pdCh2b2lkKQo+ICB7Cj4gIAkvKiBWZXJpZnkgbm8gb25lIGhhcyBkb25lIGFueXRoaW5nIHNp bGx5OiAqLwoKUmVnYXJkcy4KCi0tIApZYW5uIERyb25lYXVkCk9QVEVZQQoKCgpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1h aWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xp c3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ou.quest-ce.net ([195.154.187.82]:38486 "EHLO ou.quest-ce.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726911AbfEOO3Q (ORCPT ); Wed, 15 May 2019 10:29:16 -0400 Message-ID: <4c5ae46657e1931a832def5645db61eb0bf1accd.camel@opteya.com> From: Yann Droneaud Date: Wed, 15 May 2019 16:00:20 +0200 In-Reply-To: <20190515100400.3450-1-christian@brauner.io> References: <20190515100400.3450-1-christian@brauner.io> Content-Type: text/plain; charset="UTF-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: Re: [PATCH 1/2] pid: add pidfd_open() Sender: linux-arch-owner@vger.kernel.org List-ID: To: Christian Brauner , 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 Cc: 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: <20190515140020.dmjpmPdNaZ-L4MtRldjF97ISVF86QBJN6CODN1w1Rkk@z> 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 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 ? 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