From 0515d3a20c0711ca89a277a60ae4aab6ab183d3b Mon Sep 17 00:00:00 2001 From: Imre Deak Date: Wed, 7 Mar 2018 13:19:30 +0200 Subject: [PATCH] umh debug Signed-off-by: Imre Deak --- kernel/umh.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/kernel/umh.c b/kernel/umh.c index 18e5fa4b0e71..d00ccf369198 100644 --- a/kernel/umh.c +++ b/kernel/umh.c @@ -296,6 +296,12 @@ void __usermodehelper_set_disable_depth(enum umh_disable_depth depth) up_write(&umhelper_sem); } +static unsigned long stacktrace_entries[32]; +static struct stack_trace stacktrace = { + .entries = stacktrace_entries, + .max_entries = ARRAY_SIZE(stacktrace_entries), +}; + /** * __usermodehelper_disable - Prevent new helpers from being started. * @depth: New value to assign to usermodehelper_disabled. @@ -322,8 +328,11 @@ int __usermodehelper_disable(enum umh_disable_depth depth) retval = wait_event_timeout(running_helpers_waitq, atomic_read(&running_helpers) == 0, RUNNING_HELPERS_TIMEOUT); - if (retval) + if (retval) { + print_stack_trace(&stacktrace, 0); + return 0; + } __usermodehelper_set_disable_depth(UMH_ENABLED); return -EAGAIN; @@ -440,6 +449,11 @@ int call_usermodehelper_exec(struct subprocess_info *sub_info, int wait) if (wait == UMH_NO_WAIT) /* task has freed sub_info */ goto unlock; + pr_info("%s: from %ps\n", __func__, __builtin_return_address(0)); + stacktrace.nr_entries = 0; + stacktrace.skip = 0; + save_stack_trace(&stacktrace); + if (wait & UMH_KILLABLE) { retval = wait_for_completion_killable(&done); if (!retval) -- 2.13.2