d2b3e5
From 37c5b64e0e6966afe66d62ad9c700d27f3065e4e Mon Sep 17 00:00:00 2001
d2b3e5
From: Dmitry Safonov <dima@arista.com>
d2b3e5
Date: Thu, 10 May 2018 19:14:43 +0100
d2b3e5
Subject: [PATCH 3/8] aio: Allow expressions in NR_IOEVENTS_IN_PAGES macro
d2b3e5
d2b3e5
The macro is used only in aio_estimate_nr_reqs():
d2b3e5
unsigned int k_max_reqs = NR_IOEVENTS_IN_NPAGES(size/PAGE_SIZE);
d2b3e5
d2b3e5
Which compiler may evaluate as (((PAGE_SIZE*size)/PAGE_SIZE) - ...)
d2b3e5
It works as long as PAGE_SIZE is long.
d2b3e5
The patches set converts PAGE_SIZE to use sysconf() returning
d2b3e5
(unsigned), non-long type and making the aio macro overflowing.
d2b3e5
d2b3e5
I do not see any value making PAGE_SIZE (unsigned long) typed.
d2b3e5
d2b3e5
Cc: Kirill Tkhai <ktkhai@virtuozzo.com>
d2b3e5
Signed-off-by: Dmitry Safonov <dima@arista.com>
d2b3e5
Signed-off-by: Andrei Vagin <avagin@virtuozzo.com>
d2b3e5
---
d2b3e5
 criu/aio.c | 2 +-
d2b3e5
 1 file changed, 1 insertion(+), 1 deletion(-)
d2b3e5
d2b3e5
diff --git a/criu/aio.c b/criu/aio.c
d2b3e5
index 27c251df5..45651f2d3 100644
d2b3e5
--- a/criu/aio.c
d2b3e5
+++ b/criu/aio.c
d2b3e5
@@ -13,7 +13,7 @@
d2b3e5
 #include "images/mm.pb-c.h"
d2b3e5
 #include <compel/compel.h>
d2b3e5
 
d2b3e5
-#define NR_IOEVENTS_IN_NPAGES(npages) ((PAGE_SIZE * npages - sizeof(struct aio_ring)) / sizeof(struct io_event))
d2b3e5
+#define NR_IOEVENTS_IN_NPAGES(npages) ((PAGE_SIZE * (npages) - sizeof(struct aio_ring)) / sizeof(struct io_event))
d2b3e5
 
d2b3e5
 int dump_aio_ring(MmEntry *mme, struct vma_area *vma)
d2b3e5
 {
d2b3e5
-- 
d2b3e5
2.17.0
d2b3e5