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: PyConfig_Clear() doesn't clear _orig_argv member (_PyWideStringList_Copy breaks asan builds)
Type: resource usage Stage: resolved
Components: Build Versions: Python 3.10, Python 3.9
process
Status: closed Resolution: fixed
Dependencies: Superseder:
Assigned To: Nosy List: christian.heimes, miss-islington, vstinner
Priority: normal Keywords: patch

Created on 2020-06-12 07:30 by christian.heimes, last changed 2022-04-11 14:59 by admin. This issue is now closed.

Pull Requests
URL Status Linked Edit
PR 20887 merged miss-islington, 2020-06-15 14:28
Messages (6)
msg371336 - (view) Author: Christian Heimes (christian.heimes) * (Python committer) Date: 2020-06-12 07:30
It's not possible to build Python with address sanitizer and memory leak checker asan.

$ ./configure --with-address-sanitizer --with-undefined-behavior-sanitizer
$ make
...
./python -E -S -m sysconfig --generate-posix-vars ;\
if test $? -ne 0 ; then \
        echo "generate-posix-vars failed" ; \
        rm -f ./pybuilddir.txt ; \
        exit 1 ; \
fi

=================================================================
==1585722==ERROR: LeakSanitizer: detected memory leaks

Direct leak of 48 byte(s) in 1 object(s) allocated from:
    #0 0x7fa404ea9667 in __interceptor_malloc (/lib64/libasan.so.6+0xb0667)
    #1 0x9ab398 in _PyWideStringList_Copy Python/initconfig.c:315
    #2 0x9b48bd in _PyConfig_Copy Python/initconfig.c:857
    #3 0xa20b4c in _PyInterpreterState_SetConfig Python/pystate.c:1834
    #4 0xa07a14 in pycore_create_interpreter Python/pylifecycle.c:554
    #5 0xa07a14 in pyinit_config Python/pylifecycle.c:759
    #6 0xa07a14 in pyinit_core Python/pylifecycle.c:926
    #7 0xa09b17 in Py_InitializeFromConfig Python/pylifecycle.c:1136
    #8 0x4766c2 in pymain_init Modules/main.c:66
    #9 0x47bd12 in pymain_main Modules/main.c:653
    #10 0x47bd12 in Py_BytesMain Modules/main.c:686
    #11 0x7fa404173041 in __libc_start_main (/lib64/libc.so.6+0x27041)

Direct leak of 48 byte(s) in 1 object(s) allocated from:
    #0 0x7fa404ea9667 in __interceptor_malloc (/lib64/libasan.so.6+0xb0667)
    #1 0x9ab398 in _PyWideStringList_Copy Python/initconfig.c:315
    #2 0x9b8ee8 in PyConfig_Read Python/initconfig.c:2506
    #3 0xa07282 in pyinit_core Python/pylifecycle.c:920
    #4 0xa09b17 in Py_InitializeFromConfig Python/pylifecycle.c:1136
    #5 0x4766c2 in pymain_init Modules/main.c:66
    #6 0x47bd12 in pymain_main Modules/main.c:653
    #7 0x47bd12 in Py_BytesMain Modules/main.c:686
    #8 0x7fa404173041 in __libc_start_main (/lib64/libc.so.6+0x27041)

Indirect leak of 200 byte(s) in 6 object(s) allocated from:
    #0 0x7fa404ea9667 in __interceptor_malloc (/lib64/libasan.so.6+0xb0667)
    #1 0x63351c in PyMem_RawMalloc Objects/obmalloc.c:572
    #2 0x63351c in _PyMem_RawWcsdup Objects/obmalloc.c:644
    #3 0x9ab457 in _PyWideStringList_Copy Python/initconfig.c:321
    #4 0x9b48bd in _PyConfig_Copy Python/initconfig.c:857
    #5 0xa20b4c in _PyInterpreterState_SetConfig Python/pystate.c:1834
    #6 0xa07a14 in pycore_create_interpreter Python/pylifecycle.c:554
    #7 0xa07a14 in pyinit_config Python/pylifecycle.c:759
    #8 0xa07a14 in pyinit_core Python/pylifecycle.c:926
    #9 0xa09b17 in Py_InitializeFromConfig Python/pylifecycle.c:1136
    #10 0x4766c2 in pymain_init Modules/main.c:66
    #11 0x47bd12 in pymain_main Modules/main.c:653
    #12 0x47bd12 in Py_BytesMain Modules/main.c:686
    #13 0x7fa404173041 in __libc_start_main (/lib64/libc.so.6+0x27041)

Indirect leak of 200 byte(s) in 6 object(s) allocated from:
    #0 0x7fa404ea9667 in __interceptor_malloc (/lib64/libasan.so.6+0xb0667)
    #1 0x63351c in PyMem_RawMalloc Objects/obmalloc.c:572
    #2 0x63351c in _PyMem_RawWcsdup Objects/obmalloc.c:644
    #3 0x9ab457 in _PyWideStringList_Copy Python/initconfig.c:321
    #4 0x9b8ee8 in PyConfig_Read Python/initconfig.c:2506
    #5 0xa07282 in pyinit_core Python/pylifecycle.c:920
    #6 0xa09b17 in Py_InitializeFromConfig Python/pylifecycle.c:1136
    #7 0x4766c2 in pymain_init Modules/main.c:66
    #8 0x47bd12 in pymain_main Modules/main.c:653
    #9 0x47bd12 in Py_BytesMain Modules/main.c:686
    #10 0x7fa404173041 in __libc_start_main (/lib64/libc.so.6+0x27041)


Workaround:

$ cat Misc/asan-suppression.txt 
leak:_PyWideStringList_Copy
$ LSAN_OPTIONS="suppressions=Misc/asan-suppression.txt" make
msg371546 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2020-06-15 13:50
Regression introduced by commit e81f6e687d0f04a45f2389d0b43fafd6d8491624 in bpo-40910. I wrote PR 20886 to fix it.
msg371551 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2020-06-15 14:27
New changeset e2d47a0568c6da9229580829917fd6aa702133b3 by Victor Stinner in branch 'master':
bpo-40910: PyConfig_Clear() clears _orig_argv (GH-20886)
https://github.com/python/cpython/commit/e2d47a0568c6da9229580829917fd6aa702133b3
msg371555 - (view) Author: Christian Heimes (christian.heimes) * (Python committer) Date: 2020-06-15 14:48
Works for me, thanks for the quick fix!
msg371561 - (view) Author: miss-islington (miss-islington) Date: 2020-06-15 15:19
New changeset bab0833d49f8d38488ff1469edcec9b47db0dc5c by Miss Islington (bot) in branch '3.9':
bpo-40910: PyConfig_Clear() clears _orig_argv (GH-20886)
https://github.com/python/cpython/commit/bab0833d49f8d38488ff1469edcec9b47db0dc5c
msg371570 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2020-06-15 16:23
> Works for me, thanks for the quick fix!

I'm surprised that libasan doesn't allow to run an application which leaks memory :-) I understand that it's the intented behavior. At least in this case, it was a real bug and hopefully it was trivial to fix it!
History
Date User Action Args
2022-04-11 14:59:32adminsetgithub: 85125
2020-06-15 16:23:50vstinnersetmessages: + msg371570
2020-06-15 15:19:10miss-islingtonsetmessages: + msg371561
2020-06-15 14:48:33christian.heimessetmessages: + msg371555
2020-06-15 14:38:14vstinnersetstatus: open -> closed
resolution: fixed
stage: patch review -> resolved
2020-06-15 14:28:03miss-islingtonsetkeywords: + patch
nosy: + miss-islington

pull_requests: + pull_request20070
stage: needs patch -> patch review
2020-06-15 14:27:54vstinnersetmessages: + msg371551
2020-06-15 13:50:52vstinnersettitle: _PyWideStringList_Copy breaks asan builds -> PyConfig_Clear() doesn't clear _orig_argv member (_PyWideStringList_Copy breaks asan builds)
2020-06-15 13:50:31vstinnersetmessages: + msg371546
2020-06-15 08:32:34christian.heimessetnosy: + vstinner

type: compile error -> resource usage
stage: needs patch
2020-06-12 07:30:34christian.heimescreate