|
@@ -19,7 +19,7 @@
|
|
|
* current->executable is only used by the procfs. This allows a dispatch
|
|
|
* table to check for several different types of binary formats. We keep
|
|
|
* trying until we recognize the file or we run out of supported binary
|
|
|
- * formats.
|
|
|
+ * formats.
|
|
|
*/
|
|
|
|
|
|
#include <linux/slab.h>
|
|
@@ -1268,6 +1268,13 @@ int flush_old_exec(struct linux_binprm * bprm)
|
|
|
flush_thread();
|
|
|
current->personality &= ~bprm->per_clear;
|
|
|
|
|
|
+ /*
|
|
|
+ * We have to apply CLOEXEC before we change whether the process is
|
|
|
+ * dumpable (in setup_new_exec) to avoid a race with a process in userspace
|
|
|
+ * trying to access the should-be-closed file descriptors of a process
|
|
|
+ * undergoing exec(2).
|
|
|
+ */
|
|
|
+ do_close_on_exec(current->files);
|
|
|
return 0;
|
|
|
|
|
|
out:
|
|
@@ -1330,7 +1337,6 @@ void setup_new_exec(struct linux_binprm * bprm)
|
|
|
group */
|
|
|
current->self_exec_id++;
|
|
|
flush_signal_handlers(current, 0);
|
|
|
- do_close_on_exec(current->files);
|
|
|
}
|
|
|
EXPORT_SYMBOL(setup_new_exec);
|
|
|
|