[CRIU] [PATCH 2/5] zdtm/vdso/ia32: Use uint64_t for /proc/self/maps
Dmitry Safonov
dima at arista.com
Thu May 2 04:34:42 MSK 2019
Add some comments to state things those might be not obvious.
Signed-off-by: Dmitry Safonov <dima at arista.com>
---
test/zdtm/static/vdso-proxy.c | 25 ++++++++++++++++++-------
1 file changed, 18 insertions(+), 7 deletions(-)
diff --git a/test/zdtm/static/vdso-proxy.c b/test/zdtm/static/vdso-proxy.c
index 2381127b7b7d..66d6741f4b2d 100644
--- a/test/zdtm/static/vdso-proxy.c
+++ b/test/zdtm/static/vdso-proxy.c
@@ -1,3 +1,4 @@
+#include <inttypes.h>
#include <stdbool.h>
#include <stdlib.h>
@@ -8,6 +9,10 @@ const char *test_author = "Dmitry Safonov <dsafonov at virtuozzo.com>";
#define BUILD_BUG_ON(condition) ((void)sizeof(char[1 - 2*!!(condition)]))
#define VDSO_BAD_ADDR (-1ul)
+/*
+ * Use constant MAX_VMAS - to minimize the risk of allocating a new
+ * mapping or changing the size of existent VMA with realloc()
+ */
#define MAX_VMAS 80
#define BUF_SIZE 1024
@@ -18,8 +23,13 @@ const char *test_author = "Dmitry Safonov <dsafonov at virtuozzo.com>";
* Also previous vdso/vvar vma should still be present after C/R.
*/
struct vm_area {
- unsigned long start;
- unsigned long end;
+ /*
+ * Intentionally use 64bit integer to make sure that it's possible
+ * to parse mappings >4Gb - those might appear on ia32
+ * that's restored by x86_64 CRIU ¯\(°_o)/¯
+ */
+ uint64_t start;
+ uint64_t end;
bool is_vvar_or_vdso;
};
@@ -43,11 +53,12 @@ static int parse_maps(struct vm_area *vmas)
if (fgets(buf, BUF_SIZE, maps) == NULL)
break;
- v->start = strtoul(buf, &end, 16);
- v->end = strtoul(end + 1, NULL, 16);
+ v->start = strtoull(buf, &end, 16);
+ v->end = strtoull(end + 1, NULL, 16);
v->is_vvar_or_vdso |= strstr(buf, "[vdso]") != NULL;
v->is_vvar_or_vdso |= strstr(buf, "[vvar]") != NULL;
- test_msg("[NOTE]\tVMA: [%#lx, %#lx]\n", v->start, v->end);
+ test_msg("[NOTE]\tVMA: [%#" PRIx64 ", %#" PRIx64 "]\n",
+ v->start, v->end);
}
if (i == MAX_VMAS) {
@@ -88,7 +99,7 @@ static int check_vvar_vdso(struct vm_area *before, struct vm_area *after)
continue;
if (cmp < 0) {/* Lost mapping */
- test_msg("[NOTE]\tLost mapping: %#lx-%#lx\n",
+ test_msg("[NOTE]\tLost mapping: %#" PRIx64 "-%#" PRIx64 "\n",
before[i].start, before[i].end);
j--;
if (before[i].is_vvar_or_vdso) {
@@ -98,7 +109,7 @@ static int check_vvar_vdso(struct vm_area *before, struct vm_area *after)
continue;
}
- test_msg("[NOTE]\tNew mapping appeared: %#lx-%#lx\n",
+ test_msg("[NOTE]\tNew mapping appeared: %#" PRIx64 "-%#" PRIx64 "\n",
after[j].start, after[j].end);
i--;
}
--
2.21.0
More information about the CRIU
mailing list