|
@@ -1841,15 +1841,15 @@ SYSCALL_DEFINE3(io_submit, aio_context_t, ctx_id, long, nr,
|
|
|
if (unlikely(nr < 0))
|
|
|
return -EINVAL;
|
|
|
|
|
|
- if (unlikely(nr > LONG_MAX/sizeof(*iocbpp)))
|
|
|
- nr = LONG_MAX/sizeof(*iocbpp);
|
|
|
-
|
|
|
ctx = lookup_ioctx(ctx_id);
|
|
|
if (unlikely(!ctx)) {
|
|
|
pr_debug("EINVAL: invalid context id\n");
|
|
|
return -EINVAL;
|
|
|
}
|
|
|
|
|
|
+ if (nr > ctx->nr_events)
|
|
|
+ nr = ctx->nr_events;
|
|
|
+
|
|
|
blk_start_plug(&plug);
|
|
|
for (i = 0; i < nr; i++) {
|
|
|
struct iocb __user *user_iocb;
|
|
@@ -1870,8 +1870,6 @@ SYSCALL_DEFINE3(io_submit, aio_context_t, ctx_id, long, nr,
|
|
|
}
|
|
|
|
|
|
#ifdef CONFIG_COMPAT
|
|
|
-#define MAX_AIO_SUBMITS (PAGE_SIZE/sizeof(struct iocb *))
|
|
|
-
|
|
|
COMPAT_SYSCALL_DEFINE3(io_submit, compat_aio_context_t, ctx_id,
|
|
|
int, nr, compat_uptr_t __user *, iocbpp)
|
|
|
{
|
|
@@ -1883,15 +1881,15 @@ COMPAT_SYSCALL_DEFINE3(io_submit, compat_aio_context_t, ctx_id,
|
|
|
if (unlikely(nr < 0))
|
|
|
return -EINVAL;
|
|
|
|
|
|
- if (nr > MAX_AIO_SUBMITS)
|
|
|
- nr = MAX_AIO_SUBMITS;
|
|
|
-
|
|
|
ctx = lookup_ioctx(ctx_id);
|
|
|
if (unlikely(!ctx)) {
|
|
|
pr_debug("EINVAL: invalid context id\n");
|
|
|
return -EINVAL;
|
|
|
}
|
|
|
|
|
|
+ if (nr > ctx->nr_events)
|
|
|
+ nr = ctx->nr_events;
|
|
|
+
|
|
|
blk_start_plug(&plug);
|
|
|
for (i = 0; i < nr; i++) {
|
|
|
compat_uptr_t user_iocb;
|