mirror of
https://github.com/sstefani/mtrace.git
synced 2025-12-06 16:56:41 +08:00
munmap can fail.
According to munmap(2), the call can fail, e.g if the adress given is not at a page boundary.
This commit is contained in:
parent
61a32cf95e
commit
f090e95e83
13
report.c
13
report.c
@ -294,20 +294,25 @@ static void _report_mmap64(struct task *task, struct library_symbol *libsym)
|
||||
report_alloc(task, MT_MMAP64, ret, size.l, options.bt_depth, libsym);
|
||||
}
|
||||
|
||||
static void report_munmap(struct task *task, struct library_symbol *libsym)
|
||||
static void _report_munmap(struct task *task, struct library_symbol *libsym)
|
||||
{
|
||||
unsigned long addr = fetch_param(task, 0);
|
||||
unsigned long size = fetch_param(task, 1);
|
||||
if (unlikely(arch_pagesize==-1)) arch_pagesize=getpagesize();
|
||||
unsigned long ret = fetch_retval(task);
|
||||
|
||||
if(ret != 0 ) return;
|
||||
|
||||
if(unlikely(arch_pagesize==-1)) arch_pagesize=getpagesize();
|
||||
|
||||
// fixup size, if needed: all pages in [addr, addr+size] are unmapped -- see munmap(2)
|
||||
if (size % arch_pagesize) {
|
||||
if(size % arch_pagesize) {
|
||||
size += arch_pagesize - size % arch_pagesize;
|
||||
}
|
||||
|
||||
report_alloc(task, MT_MUNMAP, addr, size, 0, libsym);
|
||||
}
|
||||
|
||||
|
||||
static void _report_memalign(struct task *task, struct library_symbol *libsym)
|
||||
{
|
||||
unsigned long size = fetch_param(task, 1);
|
||||
@ -388,7 +393,7 @@ static const struct function flist[] = {
|
||||
{ "posix_memalign", "posix_memalign", 0, NULL, _report_posix_memalign },
|
||||
{ "mmap", "mmap", 0, NULL, _report_mmap },
|
||||
{ "mmap64", "mmap64", 1, NULL, _report_mmap64 },
|
||||
{ "munmap", "munmap", 0, report_munmap, NULL },
|
||||
{ "munmap", "munmap", 0, NULL, _report_munmap },
|
||||
{ "memalign", "memalign", 0, NULL, _report_memalign },
|
||||
{ "aligned_alloc", "aligned_alloc", 1, NULL, _report_aligned_alloc },
|
||||
{ "valloc", "valloc", 1, NULL, _report_valloc },
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user