diff options
Diffstat (limited to 'fs/exec.c')
| -rw-r--r-- | fs/exec.c | 18 |
1 files changed, 12 insertions, 6 deletions
| @@ -115,13 +115,16 @@ SYSCALL_DEFINE1(uselib, const char __user *, library) | |||
| 115 | struct file *file; | 115 | struct file *file; |
| 116 | char *tmp = getname(library); | 116 | char *tmp = getname(library); |
| 117 | int error = PTR_ERR(tmp); | 117 | int error = PTR_ERR(tmp); |
| 118 | static const struct open_flags uselib_flags = { | ||
| 119 | .open_flag = O_LARGEFILE | O_RDONLY | __FMODE_EXEC, | ||
| 120 | .acc_mode = MAY_READ | MAY_EXEC | MAY_OPEN, | ||
| 121 | .intent = LOOKUP_OPEN | ||
| 122 | }; | ||
| 118 | 123 | ||
| 119 | if (IS_ERR(tmp)) | 124 | if (IS_ERR(tmp)) |
| 120 | goto out; | 125 | goto out; |
| 121 | 126 | ||
| 122 | file = do_filp_open(AT_FDCWD, tmp, | 127 | file = do_filp_open(AT_FDCWD, tmp, &uselib_flags, LOOKUP_FOLLOW); |
| 123 | O_LARGEFILE | O_RDONLY | __FMODE_EXEC, 0, | ||
| 124 | MAY_READ | MAY_EXEC | MAY_OPEN); | ||
| 125 | putname(tmp); | 128 | putname(tmp); |
| 126 | error = PTR_ERR(file); | 129 | error = PTR_ERR(file); |
| 127 | if (IS_ERR(file)) | 130 | if (IS_ERR(file)) |
| @@ -721,10 +724,13 @@ struct file *open_exec(const char *name) | |||
| 721 | { | 724 | { |
| 722 | struct file *file; | 725 | struct file *file; |
| 723 | int err; | 726 | int err; |
| 727 | static const struct open_flags open_exec_flags = { | ||
| 728 | .open_flag = O_LARGEFILE | O_RDONLY | __FMODE_EXEC, | ||
| 729 | .acc_mode = MAY_EXEC | MAY_OPEN, | ||
| 730 | .intent = LOOKUP_OPEN | ||
| 731 | }; | ||
| 724 | 732 | ||
| 725 | file = do_filp_open(AT_FDCWD, name, | 733 | file = do_filp_open(AT_FDCWD, name, &open_exec_flags, LOOKUP_FOLLOW); |
| 726 | O_LARGEFILE | O_RDONLY | __FMODE_EXEC, 0, | ||
| 727 | MAY_EXEC | MAY_OPEN); | ||
| 728 | if (IS_ERR(file)) | 734 | if (IS_ERR(file)) |
| 729 | goto out; | 735 | goto out; |
| 730 | 736 | ||
