diff options
Diffstat (limited to 'fs/pipe.c')
| -rw-r--r-- | fs/pipe.c | 13 |
1 files changed, 9 insertions, 4 deletions
| @@ -1169,14 +1169,18 @@ long pipe_fcntl(struct file *file, unsigned int cmd, unsigned long arg) | |||
| 1169 | 1169 | ||
| 1170 | switch (cmd) { | 1170 | switch (cmd) { |
| 1171 | case F_SETPIPE_SZ: | 1171 | case F_SETPIPE_SZ: |
| 1172 | if (!capable(CAP_SYS_ADMIN) && arg > pipe_max_pages) | 1172 | if (!capable(CAP_SYS_ADMIN) && arg > pipe_max_pages) { |
| 1173 | return -EINVAL; | 1173 | ret = -EINVAL; |
| 1174 | goto out; | ||
| 1175 | } | ||
| 1174 | /* | 1176 | /* |
| 1175 | * The pipe needs to be at least 2 pages large to | 1177 | * The pipe needs to be at least 2 pages large to |
| 1176 | * guarantee POSIX behaviour. | 1178 | * guarantee POSIX behaviour. |
| 1177 | */ | 1179 | */ |
| 1178 | if (arg < 2) | 1180 | if (arg < 2) { |
| 1179 | return -EINVAL; | 1181 | ret = -EINVAL; |
| 1182 | goto out; | ||
| 1183 | } | ||
| 1180 | ret = pipe_set_size(pipe, arg); | 1184 | ret = pipe_set_size(pipe, arg); |
| 1181 | break; | 1185 | break; |
| 1182 | case F_GETPIPE_SZ: | 1186 | case F_GETPIPE_SZ: |
| @@ -1187,6 +1191,7 @@ long pipe_fcntl(struct file *file, unsigned int cmd, unsigned long arg) | |||
| 1187 | break; | 1191 | break; |
| 1188 | } | 1192 | } |
| 1189 | 1193 | ||
| 1194 | out: | ||
| 1190 | mutex_unlock(&pipe->inode->i_mutex); | 1195 | mutex_unlock(&pipe->inode->i_mutex); |
| 1191 | return ret; | 1196 | return ret; |
| 1192 | } | 1197 | } |
