Commit 4118a97030aa9bd1d520d1d06bbe0655d829df04
1 parent
52621688
memset string pages to zero to avoid putting random data on the stack
that may make some program crash at startup. Fix unsigned long / target_ulong confusion (more to do). Fix missing g2h macros. git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3249 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
2 changed files
with
5 additions
and
4 deletions
linux-user/elfload.c
... | ... | @@ -517,7 +517,7 @@ static void bswap_sym(struct elf_sym *sym) |
517 | 517 | * |
518 | 518 | */ |
519 | 519 | static unsigned long copy_elf_strings(int argc,char ** argv, void **page, |
520 | - unsigned long p) | |
520 | + target_ulong p) | |
521 | 521 | { |
522 | 522 | char *tmp, *tmp1, *pag = NULL; |
523 | 523 | int len, offset = 0; |
... | ... | @@ -544,6 +544,7 @@ static unsigned long copy_elf_strings(int argc,char ** argv, void **page, |
544 | 544 | pag = (char *)page[p/TARGET_PAGE_SIZE]; |
545 | 545 | if (!pag) { |
546 | 546 | pag = (char *)malloc(TARGET_PAGE_SIZE); |
547 | + memset(pag, 0, TARGET_PAGE_SIZE); | |
547 | 548 | page[p/TARGET_PAGE_SIZE] = pag; |
548 | 549 | if (!pag) |
549 | 550 | return 0; | ... | ... |
linux-user/mmap.c
... | ... | @@ -224,9 +224,9 @@ abort(); |
224 | 224 | start = HOST_PAGE_ALIGN(real_start); |
225 | 225 | end = start + HOST_PAGE_ALIGN(len); |
226 | 226 | if (start > real_start) |
227 | - munmap((void *)real_start, start - real_start); | |
227 | + munmap((void *)g2h(real_start), start - real_start); | |
228 | 228 | if (end < real_end) |
229 | - munmap((void *)end, real_end - end); | |
229 | + munmap((void *)g2h(end), real_end - end); | |
230 | 230 | /* use it as a fixed mapping */ |
231 | 231 | flags |= MAP_FIXED; |
232 | 232 | } else { |
... | ... | @@ -370,7 +370,7 @@ int target_munmap(target_ulong start, target_ulong len) |
370 | 370 | |
371 | 371 | /* unmap what we can */ |
372 | 372 | if (real_start < real_end) { |
373 | - ret = munmap((void *)real_start, real_end - real_start); | |
373 | + ret = munmap(g2h(real_start), real_end - real_start); | |
374 | 374 | if (ret != 0) |
375 | 375 | return ret; |
376 | 376 | } | ... | ... |