[lttng-dev] [PATCH lttng-modules] Fix: use proper pid_ns in the process statedump
Mathieu Desnoyers
mathieu.desnoyers at efficios.com
Wed Feb 21 16:43:33 EST 2018
merged into master, 2.10, 2.9, thanks!
Mathieu
----- On Feb 21, 2018, at 4:36 PM, Michael Jeanson mjeanson at efficios.com wrote:
> 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
> simplifiyng the code and removing kernel version checks.
>
> Signed-off-by: Michael Jeanson <mjeanson at efficios.com>
> ---
> lttng-statedump-impl.c | 40 +++++-----------------------------------
> wrapper/nsproxy.h | 42 ------------------------------------------
> 2 files changed, 5 insertions(+), 77 deletions(-)
> delete mode 100644 wrapper/nsproxy.h
>
> diff --git a/lttng-statedump-impl.c b/lttng-statedump-impl.c
> index a252043..1c09e51 100644
> --- a/lttng-statedump-impl.c
> +++ b/lttng-statedump-impl.c
> @@ -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
> index e9766ef..0000000
> --- a/wrapper/nsproxy.h
> +++ /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 at 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 */
> --
> 2.7.4
--
Mathieu Desnoyers
EfficiOS Inc.
http://www.efficios.com
More information about the lttng-dev
mailing list