X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;f=lttng-statedump-impl.c;h=f3ae1937b1faa5da94683d891311bc1013eb1bb8;hb=9143c6d5444e809b9d411c07a8dae94c151668ae;hp=a707c775dd683a8b6dff99b53049349ddea43fdf;hpb=1965e6b461720f6e43ff77d71f1ea086d3da88d9;p=lttng-modules.git diff --git a/lttng-statedump-impl.c b/lttng-statedump-impl.c index a707c775..f3ae1937 100644 --- a/lttng-statedump-impl.c +++ b/lttng-statedump-impl.c @@ -28,7 +28,6 @@ #include #include #include -#include #include #include #include @@ -43,7 +42,7 @@ #include #include #include -#include +#include #ifdef CONFIG_LTTNG_HAS_LIST_IRQ #include @@ -425,17 +424,24 @@ void lttng_statedump_process_ns(struct lttng_session *session, */ pid_ns = task_active_pid_ns(p); do { - trace_lttng_statedump_process_state(session, - p, type, mode, submode, status, pid_ns); trace_lttng_statedump_process_pid_ns(session, p, pid_ns); - pid_ns = pid_ns->parent; + pid_ns = pid_ns ? pid_ns->parent : NULL; } while (pid_ns); user_ns = task_cred_xxx(p, user_ns); do { trace_lttng_statedump_process_user_ns(session, p, user_ns); - user_ns = user_ns->lttng_user_ns_parent; + /* + * trace_lttng_statedump_process_user_ns() internally + * checks whether user_ns is NULL. While this does not + * appear to be a possible return value for + * task_cred_xxx(), err on the safe side and check + * for NULL here as well to be consistent with the + * paranoid behavior of + * trace_lttng_statedump_process_user_ns(). + */ + user_ns = user_ns ? user_ns->lttng_user_ns_parent : NULL; } while (user_ns); /* @@ -523,6 +529,9 @@ int lttng_enumerate_process_states(struct lttng_session *session) type = LTTNG_USER_THREAD; else type = LTTNG_KERNEL_THREAD; + + trace_lttng_statedump_process_state(session, + p, type, mode, submode, status); lttng_statedump_process_ns(session, p, type, mode, submode, status); task_unlock(p);