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.

classification
Title: ASAN, memory leak
Type: security Stage: resolved
Components: Versions: Python 3.8
process
Status: closed Resolution: duplicate
Dependencies: Superseder: Py_Finalize() doesn't clear all Python objects at exit
View: 1635741
Assigned To: Nosy List: Dhiraj_Mishra, gregory.p.smith, vstinner
Priority: normal Keywords:

Created on 2019-01-18 12:28 by Dhiraj_Mishra, last changed 2022-04-11 14:59 by admin. This issue is now closed.

Messages (2)
msg333958 - (view) Author: Dhiraj (Dhiraj_Mishra) * Date: 2019-01-18 12:28
Hi Team, 

I have compiled cpython via clang using ASAN and memory leak was observed.

After successful build of python,
1. Run python
2. Ctrl + D

==21461==ERROR: LeakSanitizer: detected memory leaks

Direct leak of 257790 byte(s) in 93 object(s) allocated from:
    #0 0x4f1460 in malloc (/home/input0/Desktop/cpython/python+0x4f1460)
    #1 0x63fc59 in PyMem_RawMalloc /home/input0/Desktop/cpython/Objects/obmalloc.c:527:12
    #2 0x63fc59 in _PyObject_Malloc /home/input0/Desktop/cpython/Objects/obmalloc.c:1550
    #3 0x644d77 in PyObject_Malloc /home/input0/Desktop/cpython/Objects/obmalloc.c:640:12

Direct leak of 1640 byte(s) in 3 object(s) allocated from:
    #0 0x4f1460 in malloc (/home/input0/Desktop/cpython/python+0x4f1460)
    #1 0x63fc59 in PyMem_RawMalloc /home/input0/Desktop/cpython/Objects/obmalloc.c:527:12
    #2 0x63fc59 in _PyObject_Malloc /home/input0/Desktop/cpython/Objects/obmalloc.c:1550
    #3 0x644d77 in PyObject_Malloc /home/input0/Desktop/cpython/Objects/obmalloc.c:640:12
    #4 0x96cea4 in _PyObject_GC_Malloc /home/input0/Desktop/cpython/Modules/gcmodule.c:1908:12
    #5 0x96cea4 in _PyObject_GC_NewVar /home/input0/Desktop/cpython/Modules/gcmodule.c:1937

Direct leak of 663 byte(s) in 1 object(s) allocated from:
    #0 0x4f1460 in malloc (/home/input0/Desktop/cpython/python+0x4f1460)
    #1 0x63fc59 in PyMem_RawMalloc /home/input0/Desktop/cpython/Objects/obmalloc.c:527:12
    #2 0x63fc59 in _PyObject_Malloc /home/input0/Desktop/cpython/Objects/obmalloc.c:1550
    #3 0x644d77 in PyObject_Malloc /home/input0/Desktop/cpython/Objects/obmalloc.c:640:12
    #4 0x8b9dd8 in r_object /home/input0/Desktop/cpython/Python/marshal.c:1362:20
    #5 0x8b84a5 in r_object /home/input0/Desktop/cpython/Python/marshal.c:1194:18
    #6 0x8b9e09 in r_object /home/input0/Desktop/cpython/Python/marshal.c:1365:22
    #7 0x8bf86a in read_object /home/input0/Desktop/cpython/Python/marshal.c:1451:9
    #8 0x8bf86a in marshal_loads_impl /home/input0/Desktop/cpython/Python/marshal.c:1763
    #9 0x8bf86a in marshal_loads /home/input0/Desktop/cpython/Python/clinic/marshal.c.h:158
    #10 0x564da7 in _PyMethodDef_RawFastCallKeywords /home/input0/Desktop/cpython/Objects/call.c

Direct leak of 579 byte(s) in 1 object(s) allocated from:
    #0 0x4f1460 in malloc (/home/input0/Desktop/cpython/python+0x4f1460)
    #1 0x63fc59 in PyMem_RawMalloc /home/input0/Desktop/cpython/Objects/obmalloc.c:527:12
    #2 0x63fc59 in _PyObject_Malloc /home/input0/Desktop/cpython/Objects/obmalloc.c:1550
    #3 0x644d77 in PyObject_Malloc /home/input0/Desktop/cpython/Objects/obmalloc.c:640:12
    #4 0x8b9dd8 in r_object /home/input0/Desktop/cpython/Python/marshal.c:1362:20
    #5 0x8b84a5 in r_object /home/input0/Desktop/cpython/Python/marshal.c:1194:18
    #6 0x8b9e09 in r_object /home/input0/Desktop/cpython/Python/marshal.c:1365:22
    #7 0x8b84a5 in r_object /home/input0/Desktop/cpython/Python/marshal.c:1194:18
    #8 0x8b9e09 in r_object /home/input0/Desktop/cpython/Python/marshal.c:1365:22
    #9 0x8b409d in PyMarshal_ReadObjectFromString /home/input0/Desktop/cpython/Python/marshal.c:1568:14
    #10 0x8a0d81 in get_frozen_object /home/input0/Desktop/cpython/Python/import.c:1277:12
    #11 0x8a0d81 in _imp_get_frozen_object_impl /home/input0/Desktop/cpython/Python/import.c:2036
    #12 0x8a0d81 in _imp_get_frozen_object /home/input0/Desktop/cpython/Python/clinic/import.c.h:198
    #13 0x5623eb in _PyCFunction_FastCallDict /home/input0/Desktop/cpython/Objects/call.c:584:14
    #14 0x5623eb in PyCFunction_Call /home/input0/Desktop/cpython/Objects/call.c:789

Direct leak of 536 byte(s) in 1 object(s) allocated from:
    #0 0x4f1460 in malloc (/home/input0/Desktop/cpython/python+0x4f1460)
    #1 0x6403b0 in PyMem_RawMalloc /home/input0/Desktop/cpython/Objects/obmalloc.c:527:12
    #2 0x6403b0 in _PyObject_Malloc /home/input0/Desktop/cpython/Objects/obmalloc.c:1550
    #3 0x6403b0 in pymalloc_realloc /home/input0/Desktop/cpython/Objects/obmalloc.c:1869
    #4 0x6403b0 in _PyObject_Realloc /home/input0/Desktop/cpython/Objects/obmalloc.c:1888
    #5 0x644ead in PyObject_Realloc /home/input0/Desktop/cpython/Objects/obmalloc.c:658:12

Indirect leak of 15640 byte(s) in 17 object(s) allocated from:
    #0 0x4f1460 in malloc (/home/input0/Desktop/cpython/python+0x4f1460)
    #1 0x63fc59 in PyMem_RawMalloc /home/input0/Desktop/cpython/Objects/obmalloc.c:527:12
    #2 0x63fc59 in _PyObject_Malloc /home/input0/Desktop/cpython/Objects/obmalloc.c:1550
    #3 0x644d77 in PyObject_Malloc /home/input0/Desktop/cpython/Objects/obmalloc.c:640:12
    #4 0x675f9a in PyType_GenericAlloc /home/input0/Desktop/cpython/Objects/typeobject.c:975:15

Indirect leak of 7440 byte(s) in 7 object(s) allocated from:
    #0 0x4f1460 in malloc (/home/input0/Desktop/cpython/python+0x4f1460)
    #1 0x63fc59 in PyMem_RawMalloc /home/input0/Desktop/cpython/Objects/obmalloc.c:527:12
    #2 0x63fc59 in _PyObject_Malloc /home/input0/Desktop/cpython/Objects/obmalloc.c:1550
    #3 0x644d77 in PyObject_Malloc /home/input0/Desktop/cpython/Objects/obmalloc.c:640:12

Indirect leak of 2571 byte(s) in 2 object(s) allocated from:
    #0 0x4f1460 in malloc (/home/input0/Desktop/cpython/python+0x4f1460)
    #1 0x63fc59 in PyMem_RawMalloc /home/input0/Desktop/cpython/Objects/obmalloc.c:527:12
    #2 0x63fc59 in _PyObject_Malloc /home/input0/Desktop/cpython/Objects/obmalloc.c:1550
    #3 0x644d77 in PyObject_Malloc /home/input0/Desktop/cpython/Objects/obmalloc.c:640:12
    #4 0x687d07 in type_call /home/input0/Desktop/cpython/Objects/typeobject.c:934:11

SUMMARY: AddressSanitizer: 286859 byte(s) leaked in 125 allocation(s).
msg411960 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2022-01-28 02:24
> 1. Run python
> 2. Ctrl + D

It seems like this scenario has recently been fixed in bpo-1635741:

$ ./python -I -X showrefcount 
Python 3.11.0a4+ (heads/main:18ea973c21, Jan 28 2022, 01:38:10) [GCC 11.2.1 20211203 (Red Hat 11.2.1-7)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> exit()
[-4 refs, 1 blocks]

If you still see memory leaks in Python 3.11, please better describe what you do to "Run python" and open a new issue ;-)
History
Date User Action Args
2022-04-11 14:59:10adminsetgithub: 79955
2022-01-28 02:24:27vstinnersetstatus: open -> closed

superseder: Py_Finalize() doesn't clear all Python objects at exit

nosy: + vstinner
messages: + msg411960
resolution: duplicate
stage: resolved
2019-01-18 12:33:26xtreaksetnosy: + gregory.p.smith
2019-01-18 12:28:26Dhiraj_Mishracreate