author: David Drysdale <drysdale@google.com> 2014-12-12 16:57:29 -0800
committer: Linus Torvalds <torvalds@linux-foundation.org> 2014-12-13 12:42:51 -0800
commit: 51f39a1f0cea1cacf8c787f652f26dfee9611874
parent: c0ef0cc9d277f0f2a83b5a287a816b3916d9f026
Commit Summary:
Diffstat:
1 file changed, 9 insertions, 0 deletions
diff --git a/fs/binfmt_script.c b/fs/binfmt_script.c
index 5027a3e14922..afdf4e3cafc2 100644
--- a/fs/binfmt_script.c
+++ b/fs/binfmt_script.c
@@ -24,6 +24,16 @@ static int load_script(struct linux_binprm *bprm)
if ((bprm->buf[0] != '#') || (bprm->buf[1] != '!'))
return -ENOEXEC;
+
+ /*
+ * If the script filename will be inaccessible after exec, typically
+ * because it is a "/dev/fd/<fd>/.." path against an O_CLOEXEC fd, give
+ * up now (on the assumption that the interpreter will want to load
+ * this file).
+ */
+ if (bprm->interp_flags & BINPRM_FLAGS_PATH_INACCESSIBLE)
+ return -ENOENT;
+
/*
* This section does the #! interpretation.
* Sorta complicated, but hopefully it will work. -TYT