diff options
Diffstat (limited to 'fs/open.c')
| -rw-r--r-- | fs/open.c | 6 | 
1 files changed, 6 insertions, 0 deletions
| diff --git a/fs/open.c b/fs/open.c index 0285ce7dbd51..f1c2f855fd43 100644 --- a/fs/open.c +++ b/fs/open.c @@ -733,6 +733,12 @@ static int do_dentry_open(struct file *f,  		return 0;  	} +	/* Any file opened for execve()/uselib() has to be a regular file. */ +	if (unlikely(f->f_flags & FMODE_EXEC && !S_ISREG(inode->i_mode))) { +		error = -EACCES; +		goto cleanup_file; +	} +  	if (f->f_mode & FMODE_WRITE && !special_file(inode->i_mode)) {  		error = get_write_access(inode);  		if (unlikely(error)) | 
