This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author christian.heimes
Recipients christian.heimes, eric.snow, erlendaasland, gvanrossum, lukasz.langa, miss-islington, ned.deily, pablogsal
Date 2022-01-06.14:27:50
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1641479270.32.0.153636488994.issue46263@roundup.psfhosted.org>
In-reply-to
Content
The test_capi check for check_pyobject_freed_is_freed() is failing because FreeBSD 14.0 uses jemalloc, which performs its own dead memory cleaning. jemalloc's free() fills freed memory with byte 0x5a, which overrides Python's 0xdd marker.

$ PYTHONMALLOC=malloc_debug gdb ./python
(gdb) b check_pyobject_freed_is_freed
(gdb) b _PyMem_DebugRawFree
(gdb) disable 2
(gdb) run -X faulthandler t.py
...
Breakpoint 1, check_pyobject_freed_is_freed (self=0x800f16fe0, _unused_args=0x0) at Modules/_testcapimodule.c:5032
5032        PyObject *op = PyObject_CallNoArgs((PyObject *)&PyBaseObject_Type);
(gdb) enable 2
(gdb) c
Continuing.

Breakpoint 2, _PyMem_DebugRawFree (ctx=0x5f8ad8 <_PyMem_Debug+96>, p=0x800e1a0a0) at Objects/obmalloc.c:2544
2544        if (p == NULL) {
(gdb) n
2549        uint8_t *q = (uint8_t *)p - 2*SST;  /* address returned from malloc */
(gdb) n
2552        _PyMem_DebugCheckAddress(__func__, api->api_id, p);
(gdb) n
2553        nbytes = read_size_t(q);
(gdb) n
2554        nbytes += PYMEM_DEBUG_EXTRA_BYTES;
(gdb) n
2555        memset(q, PYMEM_DEADBYTE, nbytes);
(gdb) n
2556        api->alloc.free(api->alloc.ctx, q);
(gdb) p *q@20
$18 = '\335' <repeats 19 times>, <incomplete sequence \335>
(gdb) n
_PyMem_RawFree (ctx=0x0, ptr=0x800e1a090) at Objects/obmalloc.c:127
127     {
(gdb) n
128         free(ptr);
(gdb) p free
$19 = {void (void *)} 0x8006002c0 <free>
(gdb) s
__free (ptr=0x800e1a090) at jemalloc_jemalloc.c:2848
2848    jemalloc_jemalloc.c: No such file or directory.
(gdb) n
2851    in jemalloc_jemalloc.c
(gdb) 
2852    in jemalloc_jemalloc.c
...
(gdb) 
check_pyobject_freed_is_freed (self=0x800f16fe0, _unused_args=0x0) at Modules/_testcapimodule.c:5038
5038        Py_SET_REFCNT(op, 1);
(gdb) p *(char*)op@20
$23 = 'Z' <repeats 20 times>
History
Date User Action Args
2022-01-06 14:27:50christian.heimessetrecipients: + christian.heimes, gvanrossum, ned.deily, lukasz.langa, eric.snow, pablogsal, miss-islington, erlendaasland
2022-01-06 14:27:50christian.heimessetmessageid: <1641479270.32.0.153636488994.issue46263@roundup.psfhosted.org>
2022-01-06 14:27:50christian.heimeslinkissue46263 messages
2022-01-06 14:27:50christian.heimescreate