Thread (25 messages) 25 messages, 7 authors, 2019-03-30

Re: [PATCH 2/4] pid: add pidfd_open()

From: Christian Brauner <christian@brauner.io>
Date: 2019-03-27 20:59:33
Also in: lkml

On Wed, Mar 27, 2019 at 06:21:24PM +0100, Yann Droneaud wrote:
Le mercredi 27 mars 2019 à 17:21 +0100, Christian Brauner a écrit :
quoted
diff --git a/kernel/pid.c b/kernel/pid.c
index 20881598bdfa..c9e24e726aba 100644
--- a/kernel/pid.c
+++ b/kernel/pid.c
@@ -26,8 +26,10 @@
+SYSCALL_DEFINE4(pidfd_open, pid_t, pid, int, procfd, int, pidfd,
unsigned int,
+		flags)
+{
+	long fd = -EINVAL;
+
+	if (flags & ~(PIDFD_TO_PROCFD | PROCFD_TO_PIDFD))
+		return -EINVAL;
+
+	if (!flags) {
+		struct pid *pidfd_pid;
+
+		if (pid <= 0)
+			return -EINVAL;
+
+		if (procfd != -1 || pidfd != -1)
+			return -EINVAL;
+
+		rcu_read_lock();
+		pidfd_pid = get_pid(find_pid_ns(pid, task_active_pid_ns(current)));
+		rcu_read_unlock();
+
+		fd = pidfd_create_fd(pidfd_pid, O_CLOEXEC);
+		put_pid(pidfd_pid);
+	} else if (flags & PIDFD_TO_PROCFD) {
[...]
quoted
+	} else if (flags & PROCFD_TO_PIDFD) {
+		if (flags & ~PROCFD_TO_PIDFD)
+			return -EINVAL;
+
+		if (pid != -1)
+			return -EINVAL;
+
+		if (pidfd >= 0)
I think it can be stricter with:

                if (pidfd != -1)
Yes.
(and match the check done for flag == 0).

Regards.

-- 
Yann Droneaud
OPTEYA
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help