aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndi Kleen <ak@linux.intel.com>2010-04-11 19:34:39 +0200
committerAndi Kleen <ak@linux.intel.com>2010-04-11 19:34:39 +0200
commit0e8f953f6bca9c3053a3fd6ac863b152d71b0141 (patch)
tree95a368db51c5e8964a7b80cc46592c1ca3c0ef75
parent7aeae042f2dc23989a8b5356f5516ff32ea92059 (diff)
downloadmce-test-0e8f953f6bca9c3053a3fd6ac863b152d71b0141.tar.gz
tinjpage: Add more error checks for memory unmaps
In case something goes wrong in the kernel with the poisoned mappings Signed-off-by: Andi Kleen <ak@linux.intel.com>
-rw-r--r--tsrc/tinjpage.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/tsrc/tinjpage.c b/tsrc/tinjpage.c
index 97b598e..fd98a4f 100644
--- a/tsrc/tinjpage.c
+++ b/tsrc/tinjpage.c
@@ -69,8 +69,10 @@ void *checked_mmap(void *start, size_t length, int prot, int flags,
void munmap_reserve(void *page, int size)
{
- munmap(page, size);
- mmap(page, size, PROT_NONE, MAP_PRIVATE|MAP_FIXED, 0, 0);
+ if (munmap(page, size) < 0)
+ err("munmap");
+ if (mmap(page, size, PROT_NONE, MAP_PRIVATE|MAP_FIXED, 0, 0) < 0)
+ err("mmap2");
}
void *xmalloc(size_t s)
@@ -657,12 +659,16 @@ static void do_shared(int shared_mode)
}
cleanup:
- if (shared_page && shared_mode == IPV_SHARED)
- shmdt(shared_page);
+ if (shared_page) {
+ if (shared_mode == IPV_SHARED)
+ shmdt(shared_page);
+ else
+ munmap_reserve(shared_page, PS);
+ }
if (shm_id >= 0 && shmctl(shm_id, IPC_RMID, NULL) < 0)
- perror("shmctl IPC_RMID");
+ err("shmctl IPC_RMID");
if (sem_id >= 0 && semctl(sem_id, 0, IPC_RMID) < 0)
- perror("semctl IPC_RMID");
+ err("semctl IPC_RMID");
return;
child_error: