Skip to content

Commit

Permalink
Update code related to OOM errors in sanitizer builds.
Browse files Browse the repository at this point in the history
Remove outdated comment and enable OOM tests under sanitizers. Also, document
the fact that the newly introduced UncheckedMalloc()/UncheckedCalloc() don't
work as intended in sanitizer builds.

BUG=357732
R=thakis@chromium.org

Review URL: https://codereview.chromium.org/217343002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@260379 0039d316-1c4b-4281-b951-d872f2087c98
  • Loading branch information
earthdok@chromium.org committed Mar 29, 2014
1 parent dbe2ca2 commit e24b74f
Show file tree
Hide file tree
Showing 3 changed files with 9 additions and 11 deletions.
2 changes: 2 additions & 0 deletions base/process/memory.h
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,8 @@ BASE_EXPORT bool AdjustOOMScore(ProcessId process, int score);
// This can be useful for huge and/or unpredictable size memory allocations.
// Please only use this if you really handle the case when the allocation
// fails. Doing otherwise would risk security.
// These functions may still crash on OOM when running under memory tools,
// specifically ASan and other sanitizers.
// Return value tells whether the allocation succeeded. If it fails |result| is
// set to NULL, otherwise it holds the memory address.
BASE_EXPORT WARN_UNUSED_RESULT bool UncheckedMalloc(size_t size,
Expand Down
3 changes: 1 addition & 2 deletions base/process/memory_linux.cc
Original file line number Diff line number Diff line change
Expand Up @@ -199,8 +199,7 @@ bool AdjustOOMScore(ProcessId process, int score) {
}

bool UncheckedMalloc(size_t size, void** result) {
#if defined(ADDRESS_SANITIZER) || defined(MEMORY_SANITIZER) || \
defined(THREAD_SANITIZER) || defined(LEAK_SANITIZER) || \
#if defined(MEMORY_TOOL_REPLACES_ALLOCATOR) || \
(!defined(LIBC_GLIBC) && !defined(USE_TCMALLOC))
*result = malloc(size);
#elif defined(LIBC_GLIBC) && !defined(USE_TCMALLOC)
Expand Down
15 changes: 6 additions & 9 deletions base/process/memory_unittest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -152,13 +152,9 @@ TEST(ProcessMemoryTest, MacTerminateOnHeapCorruption) {
// Android doesn't implement set_new_handler, so we can't use the
// OutOfMemoryTest cases.
// OpenBSD does not support these tests either.
// AddressSanitizer and ThreadSanitizer define the malloc()/free()/etc.
// functions so that they don't crash if the program is out of memory, so the
// OOM tests aren't supposed to work.
// TODO(vandebo) make this work on Windows too.
#if !defined(OS_ANDROID) && !defined(OS_OPENBSD) && \
!defined(OS_WIN) && \
!defined(ADDRESS_SANITIZER) && !defined(THREAD_SANITIZER)
!defined(OS_WIN)

#if defined(USE_TCMALLOC)
extern "C" {
Expand Down Expand Up @@ -397,7 +393,9 @@ class OutOfMemoryHandledTest : public OutOfMemoryTest {

// TODO(b.kelemen): make UncheckedMalloc and UncheckedCalloc work
// on Windows as well.

// UncheckedMalloc() and UncheckedCalloc() work as regular malloc()/calloc()
// under sanitizer tools.
#if !defined(MEMORY_TOOL_REPLACES_ALLOCATOR)
TEST_F(OutOfMemoryHandledTest, UncheckedMalloc) {
EXPECT_TRUE(base::UncheckedMalloc(kSafeMallocSize, &value_));
EXPECT_TRUE(value_ != NULL);
Expand Down Expand Up @@ -426,6 +424,5 @@ TEST_F(OutOfMemoryHandledTest, UncheckedCalloc) {
EXPECT_FALSE(base::UncheckedCalloc(1, test_size_, &value_));
EXPECT_TRUE(value_ == NULL);
}

#endif // !defined(OS_ANDROID) && !defined(OS_OPENBSD) &&
// !defined(OS_WIN) && !defined(ADDRESS_SANITIZER)
#endif // !defined(MEMORY_TOOL_REPLACES_ALLOCATOR)
#endif // !defined(OS_ANDROID) && !defined(OS_OPENBSD) && !defined(OS_WIN)

0 comments on commit e24b74f

Please sign in to comment.