diff options
author | Andi Kleen <ak@linux.intel.com> | 2010-04-11 19:34:39 +0200 |
---|---|---|
committer | Andi Kleen <ak@linux.intel.com> | 2010-04-11 19:34:39 +0200 |
commit | 0e8f953f6bca9c3053a3fd6ac863b152d71b0141 (patch) | |
tree | 95a368db51c5e8964a7b80cc46592c1ca3c0ef75 | |
parent | 7aeae042f2dc23989a8b5356f5516ff32ea92059 (diff) | |
download | mce-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.c | 18 |
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: |