aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/pipe.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/fs/pipe.c b/fs/pipe.c
index d79872eba09a..60da077400f1 100644
--- a/fs/pipe.c
+++ b/fs/pipe.c
@@ -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
1194out:
1190 mutex_unlock(&pipe->inode->i_mutex); 1195 mutex_unlock(&pipe->inode->i_mutex);
1191 return ret; 1196 return ret;
1192} 1197}