From 78dd44ce3a2230c6f4093a35da7edda88cf3a106 Mon Sep 17 00:00:00 2001 From: Gabriel Corona Date: Thu, 24 Apr 2014 13:07:56 +0200 Subject: [PATCH] [mc] mprotect the region *after* zero-ing ignored parts: Doing it the other way round segfaults. --- src/mc/mc_checkpoint.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/mc/mc_checkpoint.c b/src/mc/mc_checkpoint.c index 53c64dc73c..cd2beff86e 100644 --- a/src/mc/mc_checkpoint.c +++ b/src/mc/mc_checkpoint.c @@ -89,7 +89,6 @@ static mc_mem_region_t MC_region_new(int type, void *start_addr, size_t size) new_reg->size = size; new_reg->data = mmap(NULL, size, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0); memcpy(new_reg->data, start_addr, size); - mprotect(new_reg->data, size, PROT_READ); madvise(new_reg->data, size, MADV_MERGEABLE); XBT_DEBUG("New region : type : %d, data : %p (real addr %p), size : %zu", type, new_reg->data, start_addr, size); @@ -497,6 +496,13 @@ mc_snapshot_t MC_take_snapshot(int num_state){ if(num_state > 0) MC_dump_checkpoint_ignore(snapshot); + // mprotect the region after zero-ing ignored parts: + size_t i; + for(i=0; i!=NB_REGIONS; ++i) { + mc_mem_region_t region = snapshot->regions[i]; + mprotect(region->data, region->size, PROT_READ); + } + return snapshot; } -- 2.20.1