From: Neil Horman <nhorman@tuxdriver.com>
To: linux-kernel@vger.kernel.org
Cc: oleg@redhat.com, alan@lxorguk.ukuu.org.uk, andi@firstfloor.org,
akpm@linux-foundation.org, earl_chew@agilent.com
Subject: Re: [PATCH 3/3] exec: Allow do_coredump to wait for user space pipe readers to complete (v5)
Date: Wed, 1 Jul 2009 11:37:57 -0400 [thread overview]
Message-ID: <20090701153757.GG29601@hmsreliant.think-freely.org> (raw)
In-Reply-To: <20090701152640.GD29601@hmsreliant.think-freely.org>
core_pattern: Allow core_pattern pipes to wait for user space to complete
One of the things that user space processes like to do is look at metadata for a
crashing process in their /proc/<pid> directory. this is racy however, since
do_coredump in the kernel doesn't wait for the user space process to complete
before it reaps the crashing process. This patch corrects that. Allowing the
kernel to wait for the user space process to complete before cleaning up the
crashing process. This is a bit tricky to do for a few reasons:
1) The user space process isn't our child, so we can't sys_wait4 on it
2) We need to close the pipe before waiting for the user process to complete,
since the user process may rely on an EOF condition
I've discussed several solutions with Oleg Nesterov off-list about this, and
this is the one we've come up with. We basically add ourselves as an additional
reader (to prevent cleanup of the pipe), write the dump in ->core_dump(), then
iteratively remove ourselves as a writer (to create the EOF condition) and wake
up the user process. note that we add ourselves as a reader before writing the
file. this closes the race in the window between the time we write the dump and
the time we start checking for the user space process to be done with the pipe.
Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
Reported-by: Earl Chew <earl_chew@agilent.com>
exec.c | 29 +++++++++++++++++++++++++++++
1 file changed, 29 insertions(+)
diff --git a/fs/exec.c b/fs/exec.c
index 93ab6eb..d124346 100644
--- a/fs/exec.c
+++ b/fs/exec.c
@@ -55,6 +55,7 @@
#include <linux/kmod.h>
#include <linux/fsnotify.h>
#include <linux/fs_struct.h>
+#include <linux/pipe_fs_i.h>
#include <asm/uaccess.h>
#include <asm/mmu_context.h>
@@ -1711,6 +1712,32 @@ int get_dumpable(struct mm_struct *mm)
return (ret >= 2) ? 2 : ret;
}
+static void wait_for_dump_helpers(struct file *file)
+{
+ struct pipe_inode_info *pipe;
+
+ pipe = file->f_path.dentry->d_inode->i_pipe;
+
+ pipe_lock(pipe);
+ pipe->readers++;
+ pipe->writers--;
+ while (pipe->readers > 1) {
+ wake_up_interruptible_sync(&pipe->wait);
+ kill_fasync(&pipe->fasync_readers, SIGIO, POLL_IN);
+ pipe_wait(pipe);
+ }
+
+ /*
+ * This reclaims the additional readers count we took in
+ * do_coredump
+ */
+ pipe->readers--;
+ pipe->writers++;
+ pipe_unlock(pipe);
+
+}
+
+
void do_coredump(long signr, int exit_code, struct pt_regs *regs)
{
struct core_state core_state;
@@ -1862,6 +1889,8 @@ void do_coredump(long signr, int exit_code, struct pt_regs *regs)
current->signal->group_exit_code |= 0x80;
close_fail:
+ if (ispipe && core_pipe_limit)
+ wait_for_dump_helpers(file);
filp_close(file, NULL);
fail_dropcount:
if (dump_count)
next prev parent reply other threads:[~2009-07-01 15:38 UTC|newest]
Thread overview: 94+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-06-22 17:28 [PATCH] exec: Make do_coredump more robust and safer when using pipes in core_pattern Neil Horman
2009-06-25 23:30 ` Andrew Morton
2009-06-26 1:49 ` Neil Horman
2009-06-26 10:48 ` Neil Horman
2009-06-26 16:20 ` Andrew Morton
2009-06-26 17:30 ` Neil Horman
2009-06-28 19:31 ` Andi Kleen
2009-06-28 20:52 ` Andrew Morton
2009-06-28 21:00 ` Andi Kleen
2009-06-28 21:18 ` Andrew Morton
2009-06-28 21:50 ` Eric W. Biederman
2009-06-28 21:35 ` Eric W. Biederman
2009-06-28 21:48 ` Andi Kleen
2009-06-28 22:06 ` Eric W. Biederman
2009-06-29 9:15 ` Andi Kleen
2009-06-28 21:52 ` Andrew Morton
2009-06-26 18:00 ` Neil Horman
2009-06-26 18:02 ` [PATCH 1/2] exec: Make do_coredump more robust and safer when using pipes in core_pattern: recursive dump detection Neil Horman
2009-06-26 16:59 ` Oleg Nesterov
2009-06-26 20:24 ` Neil Horman
2009-06-26 19:14 ` [PATCH 0/2] do_coredump: misc cleanups Oleg Nesterov
2009-06-26 19:14 ` [PATCH 1/2] do_coredump: factor out put_cred() calls Oleg Nesterov
2009-06-26 22:40 ` Roland McGrath
2009-06-26 20:33 ` Oleg Nesterov
2009-06-26 19:16 ` [PATCH 2/2] do_coredump: move !ispipe code into "else" branch Oleg Nesterov
2009-06-26 20:18 ` Q: do_coredump() && d_unhashed() Oleg Nesterov
2009-06-26 22:57 ` [PATCH 0/2] do_coredump: misc cleanups Neil Horman
2009-06-26 19:37 ` [PATCH 1/2] exec: Make do_coredump more robust and safer when using pipes in core_pattern: recursive dump detection Andrew Morton
2009-06-26 20:17 ` Neil Horman
2009-06-26 18:03 ` [PATCH 2/2] exec: Make do_coredump more robust and safer when using pipes in core_pattern: wait for core collectors Neil Horman
2009-06-26 16:48 ` Oleg Nesterov
2009-06-26 20:20 ` Neil Horman
2009-06-29 0:33 ` [PATCH 1/2] exec: Make do_coredump more robust and safer when using pipes in core_pattern (v3) Neil Horman
2009-06-29 0:35 ` [PATCH 2/2] " Neil Horman
2009-06-28 22:24 ` Oleg Nesterov
2009-06-28 23:24 ` Oleg Nesterov
2009-06-29 2:36 ` Neil Horman
2009-06-28 23:32 ` Oleg Nesterov
2009-06-29 10:21 ` Neil Horman
2009-06-30 0:06 ` Oleg Nesterov
2009-06-29 0:32 ` [PATCH 0/2] " Neil Horman
2009-06-30 17:38 ` [PATCH 0/3] exec: Make do_coredump more robust and safer when using pipes in core_pattern (v4) Neil Horman
2009-06-30 17:42 ` [PATCH 1/3] exec: Make do_coredump more resilient to recursive crashes (v4) Neil Horman
2009-06-30 17:43 ` [PATCH 2/3] exec: let do_coredump limit the number of concurrent dumps to pipes (v4) Neil Horman
2009-06-30 17:46 ` [PATCH 3/3] exec: Allow do_coredump to wait for user space pipe readers to complete (v4) Neil Horman
2009-07-01 5:52 ` Oleg Nesterov
2009-07-01 10:31 ` Neil Horman
2009-07-01 12:25 ` Oleg Nesterov
2009-07-01 14:12 ` Neil Horman
2009-07-01 14:48 ` Oleg Nesterov
2009-07-01 15:26 ` [PATCH 0/3] exec: Make do_coredump more robust and safer when using pipes in core_pattern (v5) Neil Horman
2009-07-01 15:30 ` [PATCH 1/3] exec: Make do_coredump more resilient to recursive crashes (v5) Neil Horman
2009-07-01 15:34 ` [PATCH 2/3] exec: let do_coredump limit the number of concurrent dumps to pipes (v5) Neil Horman
2009-07-01 15:37 ` Neil Horman [this message]
2009-07-01 16:06 ` [PATCH 3/3] exec: Allow do_coredump to wait for user space pipe readers to complete (v5) Oleg Nesterov
2009-07-01 18:19 ` Neil Horman
2009-07-01 18:28 ` [PATCH 0/3] exec: Make do_coredump more robust and safer when using pipes in core_pattern (v6) Neil Horman
2009-07-01 18:31 ` [PATCH 1/3] exec: Make do_coredump more resilient to recursive crashes (v6) Neil Horman
2009-07-01 18:32 ` [PATCH 2/3] exec: let do_coredump limit the number of concurrent dumps to pipes (v6) Neil Horman
2009-07-01 18:37 ` [PATCH 3/3] exec: Allow do_coredump to wait for user space pipe readers to complete (v6) Neil Horman
2009-07-02 8:29 ` Oleg Nesterov
2009-07-02 10:29 ` Neil Horman
2009-07-02 11:36 ` Oleg Nesterov
2009-07-02 14:44 ` Neil Horman
2009-07-02 15:37 ` Oleg Nesterov
2009-07-02 17:53 ` Neil Horman
2009-07-03 10:10 ` Oleg Nesterov
2009-07-02 22:57 ` [PATCH 0/3] exec: Make do_coredump more robust and safer when using pipes in core_pattern (v7) Neil Horman
2009-07-02 22:59 ` [PATCH 1/3] exec: Make do_coredump more resilient to recursive crashes (v7) Neil Horman
2009-07-02 23:00 ` [PATCH 2/3] exec: let do_coredump limit the number of concurrent dumps to pipes (v7) Neil Horman
2009-07-02 23:01 ` [PATCH 3/3] exec: Allow do_coredump to wait for user space pipe readers to complete (v7) Neil Horman
2009-07-03 10:16 ` Oleg Nesterov
2009-07-03 10:44 ` [PATCH 0/3] exec: Make do_coredump more robust and safer when using pipes in core_pattern (v8) Neil Horman
2009-07-03 10:50 ` [PATCH 1/3] exec: Make do_coredump more resilient to recursive crashes (v8) Neil Horman
2009-07-07 16:14 ` Neil Horman
2009-07-03 10:51 ` [PATCH 2/3] exec: let do_coredump limit the number of concurrent dumps to pipes (v8) Neil Horman
2009-07-07 16:15 ` Neil Horman
2009-07-03 10:52 ` [PATCH 3/3] exec: Allow do_coredump to wait for user space pipe readers to complete (v8) Neil Horman
2009-07-07 16:19 ` Neil Horman
2009-07-07 16:35 ` Oleg Nesterov
2009-07-07 16:13 ` [PATCH 0/3] exec: Make do_coredump more robust and safer when using pipes in core_pattern (v8) Neil Horman
2009-07-20 15:49 ` [PATCH 0/3] exec: Make do_coredump more robust and safer when using pipes in core_pattern (v9) Neil Horman
2009-07-20 16:27 ` [PATCH 1/3] exec: Make do_coredump more resilient to recursive crashes (v9) Neil Horman
2009-07-20 16:29 ` [PATCH 2/3] exec: let do_coredump limit the number of concurrent dumps to pipes (v9) Neil Horman
2009-08-07 17:08 ` Randy Dunlap
2009-07-20 16:32 ` [PATCH 3/3] exec: Allow do_coredump to wait for user space pipe readers to complete (v9) Neil Horman
2009-07-29 15:13 ` [PATCH] exec: Make do_coredump more robust and safer when using pipes in core_pattern Scott James Remnant
2009-07-29 20:18 ` Neil Horman
2009-07-31 20:20 ` Scott James Remnant
2009-08-01 13:41 ` Neil Horman
2009-08-01 18:28 ` Scott James Remnant
2009-08-02 0:22 ` Neil Horman
2009-08-02 13:49 ` Scott James Remnant
2009-08-02 23:50 ` Neil Horman
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20090701153757.GG29601@hmsreliant.think-freely.org \
--to=nhorman@tuxdriver.com \
--cc=akpm@linux-foundation.org \
--cc=alan@lxorguk.ukuu.org.uk \
--cc=andi@firstfloor.org \
--cc=earl_chew@agilent.com \
--cc=linux-kernel@vger.kernel.org \
--cc=oleg@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®