[CRIU] [PATCH] zdtm/maps007: don't use signed values in calculations

Andrey Vagin avagin at openvz.org
Wed Dec 3 03:29:01 PST 2014


From: root <root at dhcp-10-30-21-119.sw.ru>

maps007 segfaults on i386, because "size" is calculated bigger than allowed.

This occurs when the result of lrand48() * PAGE_SIZE is negative.
In this case the % operation returns a negative value too, what is unexpected.

Signed-off-by: Andrey Vagin <avagin at openvz.org>
---
 test/zdtm/live/transition/maps007.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/test/zdtm/live/transition/maps007.c b/test/zdtm/live/transition/maps007.c
index 21960ef..53b0b4c 100644
--- a/test/zdtm/live/transition/maps007.c
+++ b/test/zdtm/live/transition/maps007.c
@@ -12,8 +12,8 @@
 #include "zdtmtst.h"
 #include "lock.h"
 
-#define MAP_SIZE (1 << 20)
-#define MEM_SIZE (1 << 29)
+#define MAP_SIZE (1UL << 20)
+#define MEM_SIZE (1UL << 29)
 #define PAGE_SIZE 4096
 
 const char *test_doc	= "create random mappings and touch memory";
@@ -93,7 +93,8 @@ int main(int argc, char **argv)
 		count++;
 
 		p = start + ((lrand48() * PAGE_SIZE) % MEM_SIZE);
-		size = (lrand48() * PAGE_SIZE) % (end - p);
+		size = lrand48() * PAGE_SIZE;
+		size %= (end - p);
 		size %= MAP_SIZE;
 		if (size == 0)
 			size = PAGE_SIZE;
-- 
1.9.3



More information about the CRIU mailing list