diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2012-08-22 04:43:47 +0200 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2012-09-27 03:09:59 +0200 |
commit | 179e037fc1370288188cb1f90b81156d75a3cb2d (patch) | |
tree | 6dcc6fc5a2b2bc9e17258a178798475c95f40544 /fs/exec.c | |
parent | new helper: iterate_fd() (diff) | |
download | linux-179e037fc1370288188cb1f90b81156d75a3cb2d.tar.xz linux-179e037fc1370288188cb1f90b81156d75a3cb2d.zip |
do_coredump(): make sure that descriptor table isn't shared
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to '')
-rw-r--r-- | fs/exec.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/fs/exec.c b/fs/exec.c index 3fc74681cc6c..beb05a95e4a3 100644 --- a/fs/exec.c +++ b/fs/exec.c @@ -2066,6 +2066,7 @@ void do_coredump(long signr, int exit_code, struct pt_regs *regs) int retval = 0; int flag = 0; int ispipe; + struct files_struct *displaced; bool need_nonrelative = false; static atomic_t core_dump_count = ATOMIC_INIT(0); struct coredump_params cprm = { @@ -2219,6 +2220,12 @@ void do_coredump(long signr, int exit_code, struct pt_regs *regs) goto close_fail; } + /* get us an unshared descriptor table; almost always a no-op */ + retval = unshare_files(&displaced); + if (retval) + goto close_fail; + if (displaced) + put_files_struct(displaced); retval = binfmt->core_dump(&cprm); if (retval) current->signal->group_exit_code |= 0x80; |