fs/open.c: allow opening only regular files during execve()
[GitHub/LineageOS/android_kernel_motorola_exynos9610.git] / fs / open.c
index 7ea118471dce59996ae3d3d9b9e3b9d156baffba..28a3956c44792d1aa7ad57a40ba90aec733c7052 100644 (file)
--- a/fs/open.c
+++ b/fs/open.c
@@ -716,6 +716,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))