diff options
-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 | } |