Fix: use proper pid_ns in the process statedump
authorMichael Jeanson <mjeanson@efficios.com>
Wed, 21 Feb 2018 21:36:17 +0000 (16:36 -0500)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Wed, 21 Feb 2018 21:42:55 +0000 (16:42 -0500)
The pid_ns we currently use from the nsproxy struct is not the task's
pid_ns but the one that children of this task will use.

As stated in include/linux/nsproxy.h :

  The pid namespace is an exception -- it's accessed using
  task_active_pid_ns.  The pid namespace here is the
  namespace that children will use.

While it will be the same most of the time, it will report incorrect
information in some situations. Plus it has the side effect of
simplifying the code and removing kernel version checks.

Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
lttng-statedump-impl.c
wrapper/nsproxy.h [deleted file]

index a2520433216f0f79d5a502cf5dbb4389222a7d0a..1c09e51a8ce6a454b4bb8c86b3e079789cc9cfcd 100644 (file)
@@ -52,7 +52,6 @@
 #include <wrapper/irqdesc.h>
 #include <wrapper/spinlock.h>
 #include <wrapper/fdtable.h>
-#include <wrapper/nsproxy.h>
 #include <wrapper/irq.h>
 #include <wrapper/tracepoint.h>
 #include <wrapper/genhd.h>
@@ -392,43 +391,14 @@ void lttng_statedump_process_ns(struct lttng_session *session,
                enum lttng_execution_submode submode,
                enum lttng_process_status status)
 {
-       struct nsproxy *proxy;
        struct pid_namespace *pid_ns;
 
-       /*
-        * Back and forth on locking strategy within Linux upstream for nsproxy.
-        * See Linux upstream commit 728dba3a39c66b3d8ac889ddbe38b5b1c264aec3
-        * "namespaces: Use task_lock and not rcu to protect nsproxy"
-        * for details.
-        */
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,17,0) || \
-               LTTNG_UBUNTU_KERNEL_RANGE(3,13,11,36, 3,14,0,0) || \
-               LTTNG_UBUNTU_KERNEL_RANGE(3,16,1,11, 3,17,0,0) || \
-               LTTNG_RHEL_KERNEL_RANGE(3,10,0,229,13,0, 3,11,0,0,0,0))
-       proxy = p->nsproxy;
-#else
-       rcu_read_lock();
-       proxy = task_nsproxy(p);
-#endif
-       if (proxy) {
-               pid_ns = lttng_get_proxy_pid_ns(proxy);
-               do {
-                       trace_lttng_statedump_process_state(session,
-                               p, type, mode, submode, status, pid_ns);
-                       pid_ns = pid_ns->parent;
-               } while (pid_ns);
-       } else {
+       pid_ns = task_active_pid_ns(p);
+       do {
                trace_lttng_statedump_process_state(session,
-                       p, type, mode, submode, status, NULL);
-       }
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,17,0) || \
-               LTTNG_UBUNTU_KERNEL_RANGE(3,13,11,36, 3,14,0,0) || \
-               LTTNG_UBUNTU_KERNEL_RANGE(3,16,1,11, 3,17,0,0) || \
-               LTTNG_RHEL_KERNEL_RANGE(3,10,0,229,13,0, 3,11,0,0,0,0))
-       /* (nothing) */
-#else
-       rcu_read_unlock();
-#endif
+                       p, type, mode, submode, status, pid_ns);
+               pid_ns = pid_ns->parent;
+       } while (pid_ns);
 }
 
 static
diff --git a/wrapper/nsproxy.h b/wrapper/nsproxy.h
deleted file mode 100644 (file)
index e9766ef..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-#ifndef _LTTNG_WRAPPER_NSPROXY_H
-#define _LTTNG_WRAPPER_NSPROXY_H
-
-/*
- * wrapper/nsproxy.h
- *
- * Copyright (C) 2011-2012 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; only
- * version 2.1 of the License.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include <linux/version.h>
-#include <linux/nsproxy.h>
-
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,11,0))
-static inline
-struct pid_namespace *lttng_get_proxy_pid_ns(struct nsproxy *proxy)
-{
-       return proxy->pid_ns_for_children;
-}
-#else
-static inline
-struct pid_namespace *lttng_get_proxy_pid_ns(struct nsproxy *proxy)
-{
-       return proxy->pid_ns;
-}
-#endif
-
-
-#endif /* _LTTNG_WRAPPER_NSPROXY_H */
This page took 0.027674 seconds and 4 git commands to generate.