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
9
report.c
9
report.c
@ -294,10 +294,14 @@ static void _report_mmap64(struct task *task, struct library_symbol *libsym)
|
|||||||
report_alloc(task, MT_MMAP64, ret, size.l, options.bt_depth, 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 addr = fetch_param(task, 0);
|
||||||
unsigned long size = fetch_param(task, 1);
|
unsigned long size = fetch_param(task, 1);
|
||||||
|
unsigned long ret = fetch_retval(task);
|
||||||
|
|
||||||
|
if(ret != 0 ) return;
|
||||||
|
|
||||||
if(unlikely(arch_pagesize==-1)) arch_pagesize=getpagesize();
|
if(unlikely(arch_pagesize==-1)) arch_pagesize=getpagesize();
|
||||||
|
|
||||||
// fixup size, if needed: all pages in [addr, addr+size] are unmapped -- see munmap(2)
|
// fixup size, if needed: all pages in [addr, addr+size] are unmapped -- see munmap(2)
|
||||||
@ -308,6 +312,7 @@ static void report_munmap(struct task *task, struct library_symbol *libsym)
|
|||||||
report_alloc(task, MT_MUNMAP, addr, size, 0, libsym);
|
report_alloc(task, MT_MUNMAP, addr, size, 0, libsym);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void _report_memalign(struct task *task, struct library_symbol *libsym)
|
static void _report_memalign(struct task *task, struct library_symbol *libsym)
|
||||||
{
|
{
|
||||||
unsigned long size = fetch_param(task, 1);
|
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 },
|
{ "posix_memalign", "posix_memalign", 0, NULL, _report_posix_memalign },
|
||||||
{ "mmap", "mmap", 0, NULL, _report_mmap },
|
{ "mmap", "mmap", 0, NULL, _report_mmap },
|
||||||
{ "mmap64", "mmap64", 1, NULL, _report_mmap64 },
|
{ "mmap64", "mmap64", 1, NULL, _report_mmap64 },
|
||||||
{ "munmap", "munmap", 0, report_munmap, NULL },
|
{ "munmap", "munmap", 0, NULL, _report_munmap },
|
||||||
{ "memalign", "memalign", 0, NULL, _report_memalign },
|
{ "memalign", "memalign", 0, NULL, _report_memalign },
|
||||||
{ "aligned_alloc", "aligned_alloc", 1, NULL, _report_aligned_alloc },
|
{ "aligned_alloc", "aligned_alloc", 1, NULL, _report_aligned_alloc },
|
||||||
{ "valloc", "valloc", 1, NULL, _report_valloc },
|
{ "valloc", "valloc", 1, NULL, _report_valloc },
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user