aboutsummaryrefslogtreecommitdiff
path: root/libc/malloc_debug/tests/malloc_debug_unit_tests.cpp
Commit message (Collapse)AuthorAgeFilesLines
* Use SKIP_WITH_HWASAN macro from libbase.Florian Mayer2022-04-151-1/+1
| | | | Change-Id: I83681d2191bf4184e52d84d1107d61065927bb24
* Skip mallinfo / malloc_info tests on HWASan.Florian Mayer2022-04-061-0/+3
| | | | | | | Those aren't implemented. Test: passes on forrest. Change-Id: I1a00f5e8ff1aba8f0e25ce589281ed3bfa9d0a5c
* Update for LocalUnwinder object removal.Christopher Ferris2022-03-031-7/+11
| | | | | | | | | | | | | | Modify libfdtrack to use the normal Unwinder object. In addition, update the libfdtrack so that it doesn't record frames in libfdtrack.so rather than skipping frames it thinks will be in the library. Modify the malloc debug code to use the normal Unwinder object. Bug: 120606663 Test: All unit tests pass. Change-Id: I3c9612dd10e62389e6219e68045ee87f7b2625f5
* Update for libunwindstack shared_ptr MapInfos.Christopher Ferris2021-10-291-11/+10
| | | | | | | | | Bug: 120606663 Test: Malloc debug unit tests pass. Change-Id: Ic8fa25c770953ebc0a78d67e54bc0d7b8e0abd87 Merged-In: Ic8fa25c770953ebc0a78d67e54bc0d7b8e0abd87 (cherry picked from commit 04233539b49d699972ec16277764513cb170c912)
* Revert "strerror: incl enum name"Steven Moreland2021-10-071-2/+1
| | | | | | | | | | | | | Revert submission 1833622-usable-strerror Reason for revert: b/202330586 Bug: 202330586 Reverted Changes: I4d8f617a0:Track strerror(3) change. I8ea86220c:strerror: incl enum name I407bd9f4d:strerror: incl enum name Change-Id: I81ed563221a77827084711eadd7fb739aeba52a1
* strerror: incl enum nameSteven Moreland2021-10-051-1/+2
| | | | | | | | | | | | strerror is nice, but usually I don't care about the text, I care about the uppercase enum Bug: N/A Test: ./tests/run-on-host.sh glibc (existing failures -> b/201305529) Test: atest bionic-unit-tests-static Test: atest malloc_debug_unit_tests Change-Id: I407bd9f4dfa918fff66a0da7df8d7239f789c7b8
* Update for change MapInfo constructor.Christopher Ferris2020-01-221-1/+2
| | | | | | | Bug: 148075852 Test: Ran unit tests. Change-Id: I8326d8db9887e2bba26d6d94786a72c49edc5d21
* Move bionic_macros.h from private to platform.Josh Gao2020-01-021-1/+1
| | | | | Test: treehugger Change-Id: Ie473914f4c8924c7240b3ac22093a9daf42fc948
* Fix allocations escaping malloc debug.Christopher Ferris2019-11-061-28/+168
| | | | | | | | | | | | | | | | | | | | | | 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
* Remove gMallocLeakZygoteChild.Christopher Ferris2019-04-161-10/+10
| | | | | | | | | | | | | | | 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)
* Disable info messages by default for malloc debug.Christopher Ferris2019-04-021-69/+67
| | | | | | | | | | | | 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
* Refactor the malloc_info code.Christopher Ferris2019-03-071-0/+85
| | | | | | | | | | | | | | malloc_info needs to be per native allocator, but the code treated it like a global function that doesn't depend on the native memory allocator. Update malloc debug to dump the actual pointers that it has been tracking. Test: bionic-unit-tests pass. Test: malloc debug tests pass. Test: malloc hook tests pass. Change-Id: I3b0d4d748489dd84c16d16933479dc8b8d79013e Merged-In: I3b0d4d748489dd84c16d16933479dc8b8d79013e (cherry picked from commit a3656a98b10d2a4a6194a5d9705ad9c2cc5877b0)
* Make aligned_alloc match the standard.Christopher Ferris2019-03-011-3/+3
| | | | | | | | | | | | | | | | Jemalloc does not verify that the size parameter is a multiple of alignment. Fix this since it only went into P. Fix the unit tests, and fix malloc debug/malloc hooks to handle this new restrictive behavior. Bug: 126944692 Test: Ran bionic unit tests. Test: Ran bionic unit tests with malloc hooks enabled (no new tests fail). Test: Ran bionic unit tests with malloc debug enabled (no new tests fail). Test: Ran malloc debug unit tests. Change-Id: I4d50785928815679c781ca729f998454d76b9192
* malloc debug: fix LogFreeError error logIris Chang2019-02-141-0/+29
| | | | | | | | | | | | | When free_track option is enabled and malloc debug detects error in VerifyFreedPointer flow, if freed pointer's usable_size is more than g_debug->config().fill_on_free_bytes(), the error log is not correct. The max. bytes printed to error message should be the max bytes to cmp, not usable size. Bug: 124420174 Test: build pass and test pass Change-Id: I41f35ab3330e49e0a6ad276d405bf4f6c3f0ea92
* Bionic malloc debug: add a new option "abort_on_error"Iris Chang2019-01-221-0/+56
| | | | | | | | | | | This new option causes an abort after malloc debug detects an error. This allows vendors to get process coredumps to analyze memory for corruption. Bug: 123009873 Test: New test cases added for unit tests and config tests. Change-Id: I6b480af7f747d6a82f61e8bf3df204a5f7ba017f
* Add new parameter for creation of MapInfo object.Christopher Ferris2018-10-041-1/+1
| | | | | | | Bug: 109657296 Test: Unit tests pass. Change-Id: Ie33b50234fa9ba2c5107c3eb0da36a466bba1589
* Change heap dump format slightly.Christopher Ferris2018-06-151-7/+20
| | | | | | | | | | | | | | | | | | | | | | | Bump the version from v1.1 to v1.2 and add a build fingerprint line. Update the heap dump documentation to match the new format and reflect what made it in P and what made it in Q. Update the unit tests for this change. Add -O0 to unit test code to make it easier to debug. Add an external function that can be used by the framework code so that there is only one way to dump the heap. Bug: 110095681 Test: Ran unit tests. Test: Did a dump of a real process and verified fingerprint. Test: Did a dump of a process without malloc debug enabled. Change-Id: I769a476cbeaf4c85c5d75bd6d6385f0e3add948c Merged-In: I769a476cbeaf4c85c5d75bd6d6385f0e3add948c (cherry picked from commit c84a2a2601a4112ca6e43a33defb989c1da8c2f4)
* Add support for using the new unwinder.Christopher Ferris2018-05-241-59/+106
| | | | | | | | | | | | | | | | This adds a new option backtrace_full, when it is set, then it will use libunwindstack. Modify the dump to file data to dump the extra information from libunwindstack. Along with the new dump file format, change the version to v1.1. Updated document for new format of file data. Add unit tests for the new functionality. Bug: 74361929 Test: Ran unit tests. Change-Id: I40fff795f5346bba7b9d7fde2e04f269ff4eb7f1
* Fix nullptr dereference during sort.Christopher Ferris2018-05-011-0/+47
| | | | | | | | | Add new unit test that will crash without this fix. Bug: 78900050 Test: Ran unit tests. Change-Id: I73e1b89e965a7b399822c3a6f25cbc70d2d355e2
* Refactor malloc debug.Christopher Ferris2018-04-021-96/+385
| | | | | | | | | | | | | | | | | | | | | | | | Changes - Refactor the code so that only guards require creating a special header for every pointer allocated. - Store only a single copy of every backtrace. This saves memory so that turning on the backtrace option doesn't result in 10X memory usage. - Added new option track_allocs that only verifies pointers are valid for free/malloc_usable_size/realloc. - Remove suffix from test names. - Add the TRACK_ALLOCS options to all guard options. - Add new option verify_pointers that is a lightweight way to verify pointers that are passed to allocation routines. - Do auto-formatting of the code. - Updated documentation for all of these changes. Bug: 74361929 Test: Ran unit tests. Test: Ran libmemunreachable unit tests. Test: Ran an app with backtrace enabled. Change-Id: I3246c48ae4f9811f64622d90d0a9b4d9d818702c
* Add aligned_alloc to libc.Christopher Ferris2018-02-071-0/+13
| | | | | | | | | Bug: 72969374 Test: Bionic unit tests pass. Test: Malloc debug unit tests pass. Change-Id: I235985bbc638855d94249c97c98f14ab2924bda0 (cherry picked from commit d69ee59594088c0d92ba9273188ef53ea5e6cd6a)
* Always wrap waitpid in TEMP_FAILURE_RETRY.Elliott Hughes2017-11-281-1/+1
| | | | | | | | | Strictly not needed in the WNOHANG case, but it's probably best to have every waitpid wrapped for future copy & pasters. Bug: https://issuetracker.google.com/69525592 Test: ran tests Change-Id: I013b0a52d2753e3d32638e9b84c79af7327fb405
* Add a legacy inline for mmap64.Dan Albert2017-10-051-2/+3
| | | | | | | | | | | | | While this was never an inline, this function alone has caused most of the bug reports related to _FILE_OFFSET_BITS=64. Providing an inline for it should allow a lot more code to build with _FILE_OFFSET_BITS=64 when targeting pre-L. Test: make checkbuild Test: built trivial cc_binary for LP32 against API 14 with _FILE_OFFSET_BITS=64 set Bug: lots Change-Id: I8479d34af4da358c11423bee43d45b59e9d4143e
* Provide method to dump backtrace heap data.Christopher Ferris2017-09-051-10/+221
| | | | | | | | | | | | | For non-zygote spawned processes, we might want to dump the backtrace data. Provide a method to send a signal to a process and then dump the data to a file. Adds a method to dump the backtrace data on exit. Update documentation and explain format of heap dump data. Test: Ran unit tests, enabled new options and used them. Change-Id: Ie2fa706694160731afe02c1382b037d06df1d069
* Add support for modifying decay timer.Christopher Ferris2017-05-151-0/+16
| | | | | | | | | | | | | | | Add the mallopt function, and only a single option so far. Bug: 36401135 Test: Built and booted bullhead. Test: Ran jemalloc unit tests. Test: Ran bionic unit tests. Test: Ran a test that allocated and free'd a large piece of memory, Test: and verified that after changing the parameter, the PSS Test: sticks around (decay timer set to 1), the PSS is purged (decay Test: timer set to 0). Change-Id: I6927929b0c539c1023d34772d9e26bb6a8a45877
* Fix the way malloc debug returns info.Christopher Ferris2017-03-091-8/+8
| | | | | | | | | | | | | | | | | | When I rewrote malloc debug, I accidentally thought that each value returned in the info buffer contained the number of backtrace frames in the backtrace. This was incorrect, it should have been the total number of allocations with the same backtrace. This is a temporary fix that sets that value to 1. The better fix is to de-dupe backtraces and then return all allocations of the same size with the same backtrace. I updated the documents to describe this. Bug: 31854476 Test: Unit tests pass. Change-Id: Idf9efaa3d363923b5d7543d90dc7c65a0ed553d9
* Enable malloc debug using environment variablesTamas Berghammer2016-11-171-5/+3
| | | | | | | | | | | | | | | | | | Previously malloc debug can be enabled only using global settings accessible to the root user only. This CL adds a new option to enable it using environment variables making it possible to use it with pure native (shell) applications on production builds (from shell user) and prepares it for using it from logwrapper on production devices. Remove the old environment variable and property since they are not necessary. Test: Enable malloc debug using environment variable and verify Test: that it only affects the commands launched from the shell. Test: Enable malloc debug using the property variable and verify Test: that it affects all commands. Test: Run all unit tests in 32 bit and 64 bit. Change-Id: Iecb75a3471552f619f196ad550c5f41fcd9ce8e5
* Add the record alloc option.Christopher Ferris2016-07-081-3/+236
| | | | | | | | | | | | This option adds the ability to record all of the allocation requests and dump them to a file when a signal is sent to the process. Included in this change, redo the option processing to add a new string option. Bug: 27747898 Change-Id: Ida043362e38b5eb1d459c99db9c2581015dab366
* Change pointer to allocation in unit tests.Christopher Ferris2016-04-201-15/+15
| | | | | | | | I changed the output from "pointer" to "allocation" for allocation mismatches. I forgot to update the tests. Bug: 28218530 Change-Id: I3278cb1dd17fb50ff7448c00e069c1af68ce5a57
* Fix race in malloc debug option free_track.Christopher Ferris2016-03-161-0/+48
| | | | | | | | | | | | | | | | | | | | | The free track mechanism could fail if, at the same time a free occurs, another thread is trying to free and verify the same allocation. This doesn't work if the freed allocation is added to the list and we still do work on it. The fix is to only add to the free list when we are done with the allocation. Also fix a problem where the usable size is computed incorrectly because two of the arguments where reversed. In addition, add a check that the allocation being verified has the correct tag before trying to check the body of the allocation. Add a test to catch the original failure. Add a test for the tag being different. Bug: 27601650 Change-Id: Ie9200677d066255b8e668a48422f23f909f4ddee
* malloc_debug: fix multiplication overflow in debug_callocColin Cross2016-03-101-0/+6
| | | | | | | | | The over flow check for nmemb * bytes in debug_calloc is incorrect, use the builtin overflow functions to check for multiplication and addition overflow. Change-Id: I3f1c13102621bc5380be1f69caa88dba2118f3cb (cherry picked from commit 239838608dbe9917acddfe5a51d92350a4c8e135)
* Export malloc_iterate and friendsColin Cross2016-02-181-0/+3
| | | | | | | Export malloc_iterate, malloc_enable, and malloc_disable to be used by libmemunreachable. Change-Id: I08a50349af82a95d096b6b4cbac37ababe4b9b06
* Fix the default alignment of the allocations.Christopher Ferris2016-02-121-2/+3
| | | | | | | | | | | | | | | | In order to enforce this constraint: The pointer returned if the allocation succeeds shall be suitably aligned so that it may be assigned to a pointer to any type of object and then used to access such an object in the space allocated. Force all allocations on 32 bit systems to have 8 byte alignment, and all allocations on 64 bit systems to have 16 byte alignment. Add a test to verify that the allocator returns the correct alignments. Bug: 26739265 Change-Id: I9af53279617408676b94e4ec6481b3ed7ffafc6a
* Remove the unused TrackHeader structure.Christopher Ferris2016-02-021-5/+1
| | | | Change-Id: I07ae5de717e1fcfbe5dfe552a531db9f630da622
* Add better free tracking.Christopher Ferris2016-01-291-11/+74
| | | | | | | | | | | | | | | | Included in this change: - Change the tag when a pointer is freed so it's easy to detect if an already freed pointer is being used. - Move the free backtrace out of the header. This backtrace is only used under only some circumstances, so no need to allocate space in all headers for it. - Add new option free_track_backtrace_num_frames to specify how many frames to record when the free occurs. This removes the dependency on the backtrace option to get backtraces. Bug: 26739265 Change-Id: I76f5209507dcf46af67ada162a7cb2bf282116f2
* Fix gcc test issues.Christopher Ferris2016-01-251-8/+14
| | | | Change-Id: I2b26b779f5198c7c9362a452b971260a8852aa7b
* Malloc debug rewrite.Christopher Ferris2016-01-251-0/+1391
The major components of the rewrite: - Completely remove the qemu shared library code. Nobody was using it and it appears to have broken at some point. - Adds the ability to enable/disable different options independently. - Adds a new option that can enable the backtrace on alloc/free when a process gets a specific signal. - Adds a new way to enable malloc debug. If a special property is set, and the process has an environment variable set, then debug malloc will be enabled. This allows something that might be a derivative of app_process to be started with an environment variable being enabled. - get_malloc_leak_info() used to return one element for each pointer that had the exact same backtrace. The new version returns information for every one of the pointers with same backtrace. It turns out ddms already automatically coalesces these, so the old method simply hid the fact that there where multiple pointers with the same amount of backtrace. - Moved all of the malloc debug specific code into the library. Nothing related to the malloc debug data structures remains in libc. - Removed the calls to the debug malloc cleanup routine. Instead, I added an atexit call with the debug malloc cleanup routine. This gets around most problems related to the timing of doing the cleanup. The new properties and environment variables: libc.debug.malloc.options Set by option name (such as "backtrace"). Setting this to a bad value will cause a usage statement to be printed to the log. libc.debug.malloc.program Same as before. If this is set, then only the program named will be launched with malloc debug enabled. This is not a complete match, but if any part of the property is in the program name, malloc debug is enabled. libc.debug.malloc.env_enabled If set, then malloc debug is only enabled if the running process has the environment variable LIBC_DEBUG_MALLOC_ENABLE set. Bug: 19145921 Change-Id: I7b0e58cc85cc6d4118173fe1f8627a391b64c0d7