Skip to content

Commit

Permalink
core_pattern: fix up a few miscellaneous bugs
Browse files Browse the repository at this point in the history
Fix do_coredump to detect a crash in the user mode helper process and abort
the attempt to recursively dump core to another copy of the helper process,
potentially ad-infinitum.

[akpm@linux-foundation.org: cleanups]
Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
Cc: <martin.pitt@ubuntu.com>
Cc: <wwoods@redhat.com>
Cc: Jeremy Fitzhardinge <jeremy@goop.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
  • Loading branch information
Neil Horman authored and Linus Torvalds committed Oct 17, 2007
1 parent 74aadce commit 3232113
Showing 1 changed file with 15 additions and 2 deletions.
17 changes: 15 additions & 2 deletions fs/exec.c
Original file line number Diff line number Diff line change
Expand Up @@ -1762,14 +1762,27 @@ int do_coredump(long signr, int exit_code, struct pt_regs * regs)
goto fail_unlock;

if (ispipe) {
core_limit = RLIM_INFINITY;
helper_argv = argv_split(GFP_KERNEL, corename+1, &helper_argc);
/* Terminate the string before the first option */
delimit = strchr(corename, ' ');
if (delimit)
*delimit = '\0';
delimit = strrchr(helper_argv[0], '/');
if (delimit)
delimit++;
else
delimit = helper_argv[0];
if (!strcmp(delimit, current->comm)) {
printk(KERN_NOTICE "Recursive core dump detected, "
"aborting\n");
goto fail_unlock;
}

core_limit = RLIM_INFINITY;

/* SIGPIPE can happen, but it's just never processed */
if(call_usermodehelper_pipe(corename+1, helper_argv, NULL, &file)) {
if (call_usermodehelper_pipe(corename+1, helper_argv, NULL,
&file)) {
printk(KERN_INFO "Core dump to %s pipe failed\n",
corename);
goto fail_unlock;
Expand Down

0 comments on commit 3232113

Please sign in to comment.