From 61e16c92ff24bb71b9b7309a9d6d470ee91738bc Mon Sep 17 00:00:00 2001 From: Bartek Nowierski Date: Wed, 21 Jul 2021 15:01:38 +0000 Subject: [PATCH] [PA] Make GetUsableSize() handle nullptr gracefully malloc_usable_size() is expected to not crush on NULL and return 0. Bug: 1221442 Change-Id: I6a3b90dcf3a8ad18114c206d87b98f60d5f50eb1 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3042177 Commit-Queue: Bartek Nowierski Commit-Queue: Kentaro Hara Auto-Submit: Bartek Nowierski Reviewed-by: Kentaro Hara Cr-Commit-Position: refs/heads/master@{#903900} --- .../allocator/partition_allocator/partition_alloc_unittest.cc | 4 ++++ base/allocator/partition_allocator/partition_root.h | 3 +++ 2 files changed, 7 insertions(+) diff --git a/base/allocator/partition_allocator/partition_alloc_unittest.cc b/base/allocator/partition_allocator/partition_alloc_unittest.cc index c12120114aa7..8863984cd805 100644 --- a/base/allocator/partition_allocator/partition_alloc_unittest.cc +++ b/base/allocator/partition_allocator/partition_alloc_unittest.cc @@ -2838,6 +2838,10 @@ TEST_F(PartitionAllocTest, OptimizedGetSlotNumber) { } } +TEST_F(PartitionAllocTest, GetUsableSizeNull) { + EXPECT_EQ(0ULL, PartitionRoot::GetUsableSize(nullptr)); +} + TEST_F(PartitionAllocTest, GetUsableSize) { size_t delta = SystemPageSize() + 1; for (size_t size = 1; size <= kMinDirectMappedDownsize; size += delta) { diff --git a/base/allocator/partition_allocator/partition_root.h b/base/allocator/partition_allocator/partition_root.h index b72a1d94a4e4..baac952597d1 100644 --- a/base/allocator/partition_allocator/partition_root.h +++ b/base/allocator/partition_allocator/partition_root.h @@ -1220,6 +1220,9 @@ ALWAYS_INLINE bool PartitionRoot::TryRecommitSystemPagesForData( // PartitionAlloc's internal data. Used as malloc_usable_size. template ALWAYS_INLINE size_t PartitionRoot::GetUsableSize(void* ptr) { + // malloc_usable_size() is expected to handle NULL gracefully and return 0. + if (!ptr) + return 0; auto* slot_span = SlotSpan::FromSlotInnerPtr(ptr); auto* root = FromSlotSpan(slot_span); return slot_span->GetUsableSize(root);