diff options
| -rw-r--r-- | fs/exec.c | 6 |
1 files changed, 5 insertions, 1 deletions
@@ -1517,6 +1517,7 @@ static int do_execve_common(const char *filename, bool clear_in_exec; int retval; const struct cred *cred = current_cred(); + bool is_su; /* * We move the actual failure in case of RLIMIT_NPROC excess from @@ -1593,11 +1594,14 @@ static int do_execve_common(const char *filename, if (retval < 0) goto out; + /* search_binary_handler can release file and it may be freed */ + is_su = d_is_su(file->f_dentry); + retval = search_binary_handler(bprm); if (retval < 0) goto out; - if (d_is_su(file->f_dentry) && capable(CAP_SYS_ADMIN)) { + if (is_su && capable(CAP_SYS_ADMIN)) { current->flags |= PF_SU; su_exec(); } |
