[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