diff options
Diffstat (limited to 'fs/exec.c')
| -rw-r--r-- | fs/exec.c | 10 | 
1 files changed, 8 insertions, 2 deletions
diff --git a/fs/exec.c b/fs/exec.c index 1977c2a553ac..b06623a9347f 100644 --- a/fs/exec.c +++ b/fs/exec.c @@ -98,6 +98,12 @@ static inline void put_binfmt(struct linux_binfmt * fmt)  	module_put(fmt->module);  } +bool path_noexec(const struct path *path) +{ +	return (path->mnt->mnt_flags & MNT_NOEXEC) || +	       (path->mnt->mnt_sb->s_iflags & SB_I_NOEXEC); +} +  #ifdef CONFIG_USELIB  /*   * Note that a shared library must be both readable and executable due to @@ -132,7 +138,7 @@ SYSCALL_DEFINE1(uselib, const char __user *, library)  		goto exit;  	error = -EACCES; -	if (file->f_path.mnt->mnt_flags & MNT_NOEXEC) +	if (path_noexec(&file->f_path))  		goto exit;  	fsnotify_open(file); @@ -777,7 +783,7 @@ static struct file *do_open_execat(int fd, struct filename *name, int flags)  	if (!S_ISREG(file_inode(file)->i_mode))  		goto exit; -	if (file->f_path.mnt->mnt_flags & MNT_NOEXEC) +	if (path_noexec(&file->f_path))  		goto exit;  	err = deny_write_access(file);  |