summaryrefslogtreecommitdiff
path: root/libc/malloc_debug
AgeCommit message (Collapse)Author
2021-07-27Merge SP1A.210723.002Scott Lobdell
Change-Id: I0fe27377cab01d329a1e8fbe80c2f9d8a0e35a30
2021-07-15Fix race when frees after main thread finishes.Christopher Ferris
When the main thread is exiting, the code deleted the g_debug global pointer and destroys the disable pthread key. Unfortunately, if malloc debug was enabled in a way that requires a header for the pointer, any frees that occur after the main thread is torn down result in calls to the underlying allocator with bad pointers. To avoid this, don't delete the g_debug pointer and don't destroy the disable pthread key. Added a new system test that allocates a lot of pointers and frees them after letting the main thread finish. Also, fix one test that can fail sporadically due to a lack of unwinding information on arm32. Bug: 189541929 Test: Passes new system tests. Change-Id: I1cfe868987a8f0dc880a5b65de6709f44a5f1988 Merged-In: I1cfe868987a8f0dc880a5b65de6709f44a5f1988 (cherry picked from commit 33d73379aad3ed7dcbb9b10f945d3bc6264b79bd)
2021-06-04Merge SP1A.210604.001Scott Lobdell
Change-Id: Id2e423c8ff6a838a96260a5b919810d4ef11e8db
2021-05-13Update API of MapInfo from libunwindstackDavid Srbecky
Use accessors to for all the fields. Test: build Change-Id: I6ae458002e059ef2f9d73931cc68f2f698f85d7e
2021-02-23Merge SP1A.210222.001Scott Lobdell
Change-Id: I0c63fcf0268c45f5f90323df42aaf2f77e05abdb
2021-02-19Add LOCAL_LICENSE_KINDS to bionicBob Badour
Added SPDX-license-identifier-Apache-2.0 to: apex/Android.bp libdl/Android.bp tools/Android.bp tools/versioner/Android.bp tools/versioner/src/Android.bp Added SPDX-license-identifier-Apache-2.0 SPDX-license-identifier-BSD to: benchmarks/Android.bp benchmarks/linker_relocation/gen/Android.bp libc/malloc_debug/Android.bp libc/system_properties/Android.bp tests/Android.bp tests/libs/Android.bp tests/libs/Android.build.dlext_testzip.mk tests/make_fortify_compile_test.mk Added SPDX-license-identifier-Apache-2.0 SPDX-license-identifier-BSD SPDX-license-identifier-ISC SPDX-license-identifier-MIT legacy_notice legacy_unencumbered to: libc/Android.bp Added SPDX-license-identifier-Apache-2.0 SPDX-license-identifier-BSD SPDX-license-identifier-MIT legacy_unencumbered to: libm/Android.bp Added SPDX-license-identifier-Apache-2.0 legacy_unencumbered to: libc/tools/Android.bp Added SPDX-license-identifier-BSD to: benchmarks/linker_relocation/Android.bp benchmarks/spawn/Android.bp libc/async_safe/Android.bp libc/malloc_hooks/Android.bp libfdtrack/Android.bp linker/Android.bp tests/headers/Android.bp tests/headers/posix/Android.bp Bug: 68860345 Bug: 151177513 Bug: 151953481 Test: m all Exempt-From-Owner-Approval: janitorial work Change-Id: Ib05bcaa276b3aa71a7654ccbe8e67e1f16aec9f3
2021-02-16Revert "[LSC] Add LOCAL_LICENSE_KINDS to bionic"Elliott Hughes
This reverts commit 48d43034d7b5a419ba56f052856696d53a7bd979. Reason for revert: bionic is multiple projects, not just one. Change-Id: Ib31e1bb8888cc85c6e7736c4e2a1d4652fd23935
2021-02-12[LSC] Add LOCAL_LICENSE_KINDS to bionicBob Badour
Added SPDX-license-identifier-Apache-2.0 to: libdl/Android.bp tools/versioner/src/Android.bp Added SPDX-license-identifier-Apache-2.0 SPDX-license-identifier-BSD to: benchmarks/Android.bp libc/malloc_debug/Android.bp libc/system_properties/Android.bp linker/Android.bp tests/Android.bp tests/libs/Android.bp tests/libs/Android.build.dlext_testzip.mk tests/make_fortify_compile_test.mk Added SPDX-license-identifier-Apache-2.0 SPDX-license-identifier-BSD SPDX-license-identifier-ISC SPDX-license-identifier-MIT legacy_notice legacy_unencumbered to: Android.bp libc/Android.bp Added SPDX-license-identifier-Apache-2.0 SPDX-license-identifier-BSD SPDX-license-identifier-ISC SPDX-license-identifier-MIT legacy_unencumbered to: tools/Android.bp tools/versioner/Android.bp Added SPDX-license-identifier-Apache-2.0 SPDX-license-identifier-BSD SPDX-license-identifier-MIT legacy_unencumbered to: libm/Android.bp Added SPDX-license-identifier-Apache-2.0 legacy_unencumbered to: libc/tools/Android.bp Added SPDX-license-identifier-BSD to: benchmarks/linker_relocation/Android.bp benchmarks/spawn/Android.bp libc/async_safe/Android.bp libc/malloc_hooks/Android.bp libfdtrack/Android.bp tests/headers/Android.bp tests/headers/posix/Android.bp Added legacy_notice to: apex/Android.bp benchmarks/linker_relocation/gen/Android.bp Bug: 68860345 Bug: 151177513 Bug: 151953481 Test: m all Exempt-From-Owner-Approval: janitorial work Change-Id: I76cad00578b9b99180ee5dd1e04b4646d5c5fedf
2020-10-15Merge SP1A.201015.001Scott Lobdell
Change-Id: I39bcf67f94cb5c7aa2ca5aff5e0a4d9abad57ab4
2020-09-28alloc_debug: get load_bias errorWeiwei.Zhang
malloc_debug can use libunwind and libunwindstck to unwind backtrace, if libc.debug.malloc.options contains the string of "backtrace_full", malloc_debug will use libunwindstck, and if libc.debug.malloc.options contains the string of "backtrace=*", malloc_debug will use libunwind. The result of libunwindstck is normal, but the result of libuniwnd is abnormal, there is a offset between the rel_cp and the correct value, so addr2line can't decode the right line number. Libunwind and libunbiwndpack calculate load_bias is different, so malloc_debug get load_bias alignment with libunwindstack. Bug: 169539402 Change-Id: I640fb5db39af622a0bb52abf2c107984065a89d5
2020-09-01Merge SP1A.200727.001Daniel Norman
Change-Id: Iae7e5be602dbc976dea7cc572e65da2d507264ca
2020-05-29Merge RP1A.200526.001Scott Lobdell
Change-Id: Ic96234634b30ccc621f69f78a036c551f08abed0
2020-05-21Fix deadlock/timeout in thread unwinding.Christopher Ferris
When malloc debug is enabled, using libbacktrace to unwind can result in a deadlock. This happens when an unwind of a thread is occuring which triggers a signal to be sent to that thread. If that thread is interrupted while a malloc debug function is executing and owns a lock, that thread is then stuck in the signal handler. Then the original unwinding thread attempts to do an allocation and gets stuck waiting for the same malloc debug lock. This is not a complete deadlock since the unwinder has timeouts, but it results in truncated unwinds that take at least five seconds to complete. Only the backtrace signals needs to be blocked because it is the only known signal that will result in a thread being paused in a signal handler. Also, added a named signal in the reserved signal list for the special bionic backtrace signal. Bug: 150833265 Test: New unit tests pass with fix, fail without fix. Change-Id: If3e41f092ebd40ce62a59ef51d636a91bc31ed80 (cherry picked from commit 9bf7817dd29d15ea49c88436db4067d87fc7e6c4)
2020-05-20Fix deadlock/timeout in thread unwinding.Christopher Ferris
When malloc debug is enabled, using libbacktrace to unwind can result in a deadlock. This happens when an unwind of a thread is occuring which triggers a signal to be sent to that thread. If that thread is interrupted while a malloc debug function is executing and owns a lock, that thread is then stuck in the signal handler. Then the original unwinding thread attempts to do an allocation and gets stuck waiting for the same malloc debug lock. This is not a complete deadlock since the unwinder has timeouts, but it results in truncated unwinds that take at least five seconds to complete. Only the backtrace signals needs to be blocked because it is the only known signal that will result in a thread being paused in a signal handler. Also, added a named signal in the reserved signal list for the special bionic backtrace signal. Bug: 150833265 Test: New unit tests pass with fix, fail without fix. Change-Id: If3e41f092ebd40ce62a59ef51d636a91bc31ed80
2020-04-22Include log/log_read.h for reading logsTom Cherry
log/log.h is concerned with writing logs. Bug: 78370064 Test: build Change-Id: I03d35f47acaa6eb0c8865836767d855be0203e92
2020-03-23Remove ANDROID_LOG_RDONLYTom Cherry
This macro hasn't been meaningful in years. Test: logging unit tests Change-Id: I849a466052524c24f1dba585a6423e80198c6b9c
2020-02-04Merge RP1A.200204.001Steven Laver
Change-Id: Ief66494e3f158448edb3f131363437cd3c927883
2020-01-23Merge RP1A.200123.001Steven Laver
Change-Id: I34b8c9cf2a59b95bdac5b01ea7b63a34a7242702
2020-01-24Merge "Add tagged pointers to bionic."Evgenii Stepanov
2020-01-23Add tagged pointers to bionic.Mitch Phillips
This patch introduces tagged pointers to bionic. We add a static tag to all pointers on arm64 compatible platforms (needs requisite top-byte-ignore hardware feature and relevant kernel patches). We dynamically detect TBI-compatible devices (a device with the TBI feature and kernel support) at process start time, and insert an implementation-dependent tag into the top byte of the pointer for all heap allocations. We then check that the tag has not been truncated when deallocating the memory. If an application incorrectly writes to the top byte of the pointer, we terminate the process at time of detection. This will allow MTE-incompatible applications to be caught early. Bug: 135754954 Bug: 147147490 Test: cd bionic && atest . Change-Id: Ie424325ba1e3c4443040ac265aeaa28d9e405d28
2020-01-22Update for change MapInfo constructor.Christopher Ferris
Bug: 148075852 Test: Ran unit tests. Change-Id: I8326d8db9887e2bba26d6d94786a72c49edc5d21
2020-01-21Merge "Export the unwinder implementation from libc."Peter Collingbourne
2020-01-21Revert "Add tagged pointers to bionic."Nicolas Geoffray
This reverts commit 43d5f9d4dd83d15a859d9be1359c4a4a47381fea. Bug: 135754954 Bug: 147147490 Exempt-From-Owner-Approval: clean revert Reason for revert: Breaks ART gtest, see: https://ci.chromium.org/p/art/builders/ci/angler-armv8-non-gen-cc/561 The crash happens on mprotect of a page, the test crashes with ENOMEM. Change-Id: I52eea1abbfaf8d8e2226f92d30aa55aba3810528
2020-01-15Add tagged pointers to bionic.Mitch Phillips
This patch introduces tagged pointers to bionic. We add a static tag to all pointers on arm64 compatible platforms (needs requisite top-byte-ignore hardware feature and relevant kernel patches). We dynamically detect TBI-compatible devices (a device with the TBI feature and kernel support) at process start time, and insert an implementation-dependent tag into the top byte of the pointer for all heap allocations. We then check that the tag has not been truncated when deallocating the memory. If an application incorrectly writes to the top byte of the pointer, we terminate the process at time of detection. This will allow MTE-incompatible applications to be caught early. Bug: 135754954 Bug: 147147490 Test: cd bionic && atest . Change-Id: I6e5b809fc81f55dd517f845eaf20f3c0ebd4d86e
2020-01-10Export the unwinder implementation from libc.Peter Collingbourne
This supports the soong commit which causes most platform binaries to stop statically linking against the unwinder implementation. The soong commit message has more motivation for this change. ARM32 uses LLVM libunwind, while all other platforms use libgcc as the unwinder implementation. This matches the current choices of unwinders on the various architectures, but means that apps which were directly linking against the libc.so unwinder symbols on ARM32 are now using LLVM libunwind instead of libgcc. Set libc_headers sdk_version to 1 so that libunwind_llvm can depend on it, and stop statically linking libunwind into libc_malloc_debug. Bug: 144430859 Change-Id: I52c7f7893d93f500383aeb0b76086c3b6f1935a5
2020-01-06Merge RP1A.200106.001Steven Laver
Change-Id: I18e758487fd86488b3a27e8b272f5e4c1aaaef59
2020-01-02Move bionic_macros.h from private to platform.Josh Gao
Test: treehugger Change-Id: Ie473914f4c8924c7240b3ac22093a9daf42fc948
2019-11-25Merge RP1A.191120.001Steven Laver
Change-Id: If50d0377cfebb2fb10b8e128c531637b23a64ff7
2019-11-15Add automatic running of tests on bionic changes.Christopher Ferris
malloc debug and malloc hooks have been broken for a long time and no one noticed. So add them to be run by default on bionic changes since that provides the most coverage. Change the malloc debug and malloc hooks tests to support isolated runs. Changed the name of the malloc hooks unit tests to system tests because they weren't really unit tests. Changed the verify leak malloc debug tests to print out extra information so it is possible to figure out what sized allocation failed. Test: Ran tests. Change-Id: Idea4c864f1d62598148ee78d7c9397e45234b1ca
2019-11-14Merge RP1A.191114.001Steven Laver
Change-Id: I19fb768a647d471d430af4b5c3f519d4125fdeee
2019-11-08Rename iterate to malloc_iterate internally.Christopher Ferris
I have no idea why I used the iterate name internally which is completely unlike every other function name. Change this to match everyone else so that it's now malloc_iterate everywhere. This is probably the last chance to change this before mainline modules begin, so make everything consistent. Test: Compiles, unit tests passes. Change-Id: I56d293377fa0fe1a3dc3dd85d6432f877cc2003c
2019-11-06Fix allocations escaping malloc debug.Christopher Ferris
When using a FILE object for some malloc debug functions, calling fprintf will trigger an allocation to be put in the object. The problem is that these allocations were not allocated by the malloc debug wrapper and they get freed during the fclose as if they are malloc debug allocation. In most cases, the code will detect the bad pointer and leak the memory, but it might also cause a crash. The fix is to avoid using fprintf so that no allocations are made in the object that survive and need to be freed in the fclose call. Change the MallocXmlElem.h to use a file decsriptor not a FILE object. Add new unit and system tests to detect this case. Bug: 143742907 Test: Ran unit and system tests. Test: Ran bionic unit tests. Change-Id: I524392de822a29483aa5be8f14c680e70033eba2
2019-10-24Merge RP1A.191024.001Steven Laver
Change-Id: I45bd393849946efea6dfd4770de8d18d98028fee
2019-10-07libc_malloc_[debug|hooks] are not available for platformJiyong Park
The libs are not available for platform. Thus removing '//apex_available:platform' from the apex_available property. However, since there are test modules that statically links the libs, we exceptionally make the static variant of the libs available to the platform. Test: m Test: mm under bionic does not create out/target/product/<name>/system/lib[64]/libc_malloc_[debug|hooks].so Change-Id: Ia6d473658c4231b04b5db511f9dacbbdf0f207b0
2019-10-07Restrict the availability of the bionic libsJiyong Park
The bionic libs are now restricted to be in the runtime APEX and the platform (for bootstrapping). It can still be referenced from other APEXes but can't be included there. Bug: 139870423 Test: m Change-Id: I7f99eef27ccf75844ca5c9a7ea866496841b738f
2019-09-29Merge RP1A.190923.001Steven Laver
Change-Id: I5fef14349b6f861693b09987565225dbc76a3c59
2019-09-16Make bionic_malloc.h a platform header.Christopher Ferris
Instead of having platform directories directly include the private header, create a platform header directory and export it. Bug: 130763340 Test: Builds. Change-Id: Ie0f092b3fe077a3de8b90266c0b28bfbc20d0dfa Merged-In: Ie0f092b3fe077a3de8b90266c0b28bfbc20d0dfa (cherry picked from commit 8f582ef2f8a77d953d0e9f33387f592d20f852e2)
2019-09-11Make bionic_malloc.h a platform header.Christopher Ferris
Instead of having platform directories directly include the private header, create a platform header directory and export it. Bug: 130763340 Test: Builds. Change-Id: Ie0f092b3fe077a3de8b90266c0b28bfbc20d0dfa
2019-08-25Merge RP1A.190822.001Scott Lobdell
Change-Id: Iaf90835a99d87f6246798efd2cea6fe9f750ea18
2019-08-07Merge RP1A.190528.001Steven Laver
Change-Id: If6e905407e26a19e0266185af46b4ff461c4d45e
2019-07-24Link libc++demangle.Dan Albert
The demangler is moving out of libc++abi to save on bloat. Test: make checkbuild Bug: http://b/138245375 Change-Id: I7402894bb326f524388c9efdf86509dad50f2018
2019-07-18Move to the libc++ demangler.Christopher Ferris
Bug: 136138882 Test: Ran malloc debug tests. Test: Ran an app with backtrace_full and verified demangling working in Test: log file. Test: Enabled leak checking and verified that the logs include properly Test: demangled. Change-Id: Ic4fd9f1522451e867048ac1bea59d8c5ed0d3577
2019-06-14Avoid recording backtrace if alloc-size is outside range of interestShibin George
Steps: 1) setprop libc.debug.malloc.program <program name> 2) setprop libc.debug.malloc.options "backtrace leak_track" 3) setprop libc.debug.malloc.minalloctorecord <int> # defaults to 0 4) setprop libc.debug.malloc.maxalloctorecord <int> # defaults to SIZE_MAX With this, backtrace recording of only those allocations which fall within the desired range will be done. CRs-Fixed: 2471840 Change-Id: I586dfd590e429b53e7b1b237294f0298ff7b4017
2019-05-22Disable malloc debug when asan enabled.Christopher Ferris
Bug: 123312263 Test: Verified with asan enabled, malloc debug does not initialize. Test: Ran tests on non-asan build and verify they pass. Change-Id: I3c37c170bf6c1de42740972f2113ae991351d931
2019-05-17Export some symbols for vendor libmemunreachableColin Cross
Add the malloc symbols used by libmemunreachable to the VNDK, and make libc_malloc_debug_backtrace vendor_available. Bug: 132302484 Test: m checkbuild Change-Id: Ide555195afa084c13eaeaf0eab6ff90787b5f2d0
2019-05-08Avoid using malloc debug code after exit.Christopher Ferris
I wrote a new unit test that would fail on the old version of the code. On a walleye big cpu, this costs about 40ns-50ns (going from ~430ns to ~480ns). I think this is an acceptable performance degradation. Bug: 131867816 Test: New unit tests pass. Change-Id: I4c0f4373fb0694bf29c3824dbb1224a8a17e211e Merged-In: I4c0f4373fb0694bf29c3824dbb1224a8a17e211e (cherry picked from commit d269fcc935b276502b9e47a575d76693fe1b8455)
2019-05-07Avoid using malloc debug code after exit.Christopher Ferris
I wrote a new unit test that would fail on the old version of the code. On a walleye big cpu, this costs about 40ns-50ns (going from ~430ns to ~480ns). I think this is an acceptable performance degradation. Bug: 131867816 Test: New unit tests pass. Change-Id: I4c0f4373fb0694bf29c3824dbb1224a8a17e211e
2019-04-16Remove gMallocLeakZygoteChild.Christopher Ferris
Remove this global variable and change the setting of it to non-zero to a call to android_mallopt. In addition, change the initialize function to use pass a bool* instead of int*. Bug: 130028357 Test: Ran malloc_debug/malloc_hooks/perfetto tests. Change-Id: I20d382bdeaaf38aac6b9dcabea5b3dfab3c945f6 Merged-In: I20d382bdeaaf38aac6b9dcabea5b3dfab3c945f6 (cherry picked from commit 5225b342f0810c027df3d09fbbcef4d324b19b93)
2019-04-16Remove gMallocLeakZygoteChild.Christopher Ferris
Remove this global variable and change the setting of it to non-zero to a call to android_mallopt. In addition, change the initialize function to use pass a bool* instead of int*. Bug: 130028357 Test: Ran malloc_debug/malloc_hooks/perfetto tests. Change-Id: I20d382bdeaaf38aac6b9dcabea5b3dfab3c945f6 Merged-In: I20d382bdeaaf38aac6b9dcabea5b3dfab3c945f6 (cherry picked from commit 5225b342f0810c027df3d09fbbcef4d324b19b93)
2019-04-02Disable info messages by default for malloc debug.Christopher Ferris
Add a new option verbose for malloc debug that is not enabled by default. This disables all of the info log messages. It turns out these log messages can add a measurable amount of time and can change the boot up. Bug: 129239269 Test: Adjusted unit tests pass. Test: Verified no messages unless verbose option used. Change-Id: I805cb7c8ecb44de88119574e59d784877cacc383