Age | Commit message (Collapse) | Author |
|
Change-Id: I0fe27377cab01d329a1e8fbe80c2f9d8a0e35a30
|
|
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)
|
|
Change-Id: Id2e423c8ff6a838a96260a5b919810d4ef11e8db
|
|
Use accessors to for all the fields.
Test: build
Change-Id: I6ae458002e059ef2f9d73931cc68f2f698f85d7e
|
|
Change-Id: I0c63fcf0268c45f5f90323df42aaf2f77e05abdb
|
|
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
|
|
This reverts commit 48d43034d7b5a419ba56f052856696d53a7bd979.
Reason for revert: bionic is multiple projects, not just one.
Change-Id: Ib31e1bb8888cc85c6e7736c4e2a1d4652fd23935
|
|
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
|
|
Change-Id: I39bcf67f94cb5c7aa2ca5aff5e0a4d9abad57ab4
|
|
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
|
|
Change-Id: Iae7e5be602dbc976dea7cc572e65da2d507264ca
|
|
Change-Id: Ic96234634b30ccc621f69f78a036c551f08abed0
|
|
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)
|
|
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
|
|
log/log.h is concerned with writing logs.
Bug: 78370064
Test: build
Change-Id: I03d35f47acaa6eb0c8865836767d855be0203e92
|
|
This macro hasn't been meaningful in years.
Test: logging unit tests
Change-Id: I849a466052524c24f1dba585a6423e80198c6b9c
|
|
Change-Id: Ief66494e3f158448edb3f131363437cd3c927883
|
|
Change-Id: I34b8c9cf2a59b95bdac5b01ea7b63a34a7242702
|
|
|
|
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
|
|
Bug: 148075852
Test: Ran unit tests.
Change-Id: I8326d8db9887e2bba26d6d94786a72c49edc5d21
|
|
|
|
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
|
|
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
|
|
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
|
|
Change-Id: I18e758487fd86488b3a27e8b272f5e4c1aaaef59
|
|
Test: treehugger
Change-Id: Ie473914f4c8924c7240b3ac22093a9daf42fc948
|
|
Change-Id: If50d0377cfebb2fb10b8e128c531637b23a64ff7
|
|
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
|
|
Change-Id: I19fb768a647d471d430af4b5c3f519d4125fdeee
|
|
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
|
|
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
|
|
Change-Id: I45bd393849946efea6dfd4770de8d18d98028fee
|
|
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
|
|
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
|
|
Change-Id: I5fef14349b6f861693b09987565225dbc76a3c59
|
|
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)
|
|
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
|
|
Change-Id: Iaf90835a99d87f6246798efd2cea6fe9f750ea18
|
|
Change-Id: If6e905407e26a19e0266185af46b4ff461c4d45e
|
|
The demangler is moving out of libc++abi to save on bloat.
Test: make checkbuild
Bug: http://b/138245375
Change-Id: I7402894bb326f524388c9efdf86509dad50f2018
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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)
|
|
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
|
|
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)
|
|
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)
|
|
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
|