From f7c990e2ca6c7b2d43cf15723c71ba38065236e8 Mon Sep 17 00:00:00 2001 From: Daniel-Constantin Mierla Date: Sun, 3 Nov 2019 10:30:09 +0100 Subject: [PATCH] core: qmalloc - print details of prev fragment when its tail is overwritten - do it when check2 field is not touched (cherry picked from commit bf1ba8d2d4519af50d44acfce5f34535fd1db8e0) --- src/core/mem/q_malloc.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/core/mem/q_malloc.c b/src/core/mem/q_malloc.c index 52d2ef722c3..47d8344bd1f 100644 --- a/src/core/mem/q_malloc.c +++ b/src/core/mem/q_malloc.c @@ -118,6 +118,7 @@ static void qm_debug_check_frag(struct qm_block* qm, struct qm_frag* f, const char* file, unsigned int line, const char* efile, unsigned int eline) { + struct qm_frag *p; if (f->check!=ST_CHECK_PATTERN){ LM_CRIT("BUG: qm: fragm. %p (address %p) " "beginning overwritten (%lx)! Memory allocator was called " @@ -147,6 +148,12 @@ static void qm_debug_check_frag(struct qm_block* qm, struct qm_frag* f, PREV_FRAG_END(f)->check1, PREV_FRAG_END(f)->check2, f, (char*)f+sizeof(struct qm_frag), file, line, f->file, f->line, efile, eline); + if(PREV_FRAG_END(f)->check2==END_CHECK_PATTERN2) { + p = FRAG_PREV(f); + LM_CRIT("BUG: qm: prev. fragm. tail overwritten [%p:%p]" + " - fragment marked by %s:%lu\n", p, + (char*)p+sizeof(struct qm_frag), p->file, p->line); + } qm_status(qm); abort(); }