diff options
-rw-r--r-- | fs/pipe.c | 7 |
1 files changed, 4 insertions, 3 deletions
@@ -1215,12 +1215,13 @@ long pipe_fcntl(struct file *file, unsigned int cmd, unsigned long arg) | |||
1215 | size = round_pipe_size(arg); | 1215 | size = round_pipe_size(arg); |
1216 | nr_pages = size >> PAGE_SHIFT; | 1216 | nr_pages = size >> PAGE_SHIFT; |
1217 | 1217 | ||
1218 | ret = -EINVAL; | ||
1219 | if (!nr_pages) | ||
1220 | goto out; | ||
1221 | |||
1218 | if (!capable(CAP_SYS_RESOURCE) && size > pipe_max_size) { | 1222 | if (!capable(CAP_SYS_RESOURCE) && size > pipe_max_size) { |
1219 | ret = -EPERM; | 1223 | ret = -EPERM; |
1220 | goto out; | 1224 | goto out; |
1221 | } else if (nr_pages < PAGE_SIZE) { | ||
1222 | ret = -EINVAL; | ||
1223 | goto out; | ||
1224 | } | 1225 | } |
1225 | ret = pipe_set_size(pipe, nr_pages); | 1226 | ret = pipe_set_size(pipe, nr_pages); |
1226 | break; | 1227 | break; |