1*6777b538SAndroid Build Coastguard Worker // Copyright 2014 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker #include "base/process/memory.h" 6*6777b538SAndroid Build Coastguard Worker 7*6777b538SAndroid Build Coastguard Worker #include <string.h> 8*6777b538SAndroid Build Coastguard Worker 9*6777b538SAndroid Build Coastguard Worker #include "base/allocator/buildflags.h" 10*6777b538SAndroid Build Coastguard Worker #include "base/debug/alias.h" 11*6777b538SAndroid Build Coastguard Worker #include "base/immediate_crash.h" 12*6777b538SAndroid Build Coastguard Worker #include "base/logging.h" 13*6777b538SAndroid Build Coastguard Worker #include "build/build_config.h" 14*6777b538SAndroid Build Coastguard Worker #include "partition_alloc/partition_alloc_buildflags.h" 15*6777b538SAndroid Build Coastguard Worker 16*6777b538SAndroid Build Coastguard Worker #if BUILDFLAG(USE_PARTITION_ALLOC) 17*6777b538SAndroid Build Coastguard Worker #include "partition_alloc/page_allocator.h" 18*6777b538SAndroid Build Coastguard Worker #endif 19*6777b538SAndroid Build Coastguard Worker 20*6777b538SAndroid Build Coastguard Worker #if BUILDFLAG(IS_WIN) 21*6777b538SAndroid Build Coastguard Worker #include <windows.h> 22*6777b538SAndroid Build Coastguard Worker #else 23*6777b538SAndroid Build Coastguard Worker #include <unistd.h> 24*6777b538SAndroid Build Coastguard Worker #endif // BUILDFLAG(IS_WIN) 25*6777b538SAndroid Build Coastguard Worker 26*6777b538SAndroid Build Coastguard Worker namespace base { 27*6777b538SAndroid Build Coastguard Worker 28*6777b538SAndroid Build Coastguard Worker // Defined in memory_mac.mm for macOS + use_partition_alloc_as_malloc=false. 29*6777b538SAndroid Build Coastguard Worker // In case of use_partition_alloc_as_malloc=true, no need to route the call to 30*6777b538SAndroid Build Coastguard Worker // the system default calloc of macOS. 31*6777b538SAndroid Build Coastguard Worker #if !BUILDFLAG(IS_APPLE) || BUILDFLAG(USE_PARTITION_ALLOC_AS_MALLOC) 32*6777b538SAndroid Build Coastguard Worker UncheckedCalloc(size_t num_items,size_t size,void ** result)33*6777b538SAndroid Build Coastguard Workerbool UncheckedCalloc(size_t num_items, size_t size, void** result) { 34*6777b538SAndroid Build Coastguard Worker const size_t alloc_size = num_items * size; 35*6777b538SAndroid Build Coastguard Worker 36*6777b538SAndroid Build Coastguard Worker // Overflow check 37*6777b538SAndroid Build Coastguard Worker if (size && ((alloc_size / size) != num_items)) { 38*6777b538SAndroid Build Coastguard Worker *result = nullptr; 39*6777b538SAndroid Build Coastguard Worker return false; 40*6777b538SAndroid Build Coastguard Worker } 41*6777b538SAndroid Build Coastguard Worker 42*6777b538SAndroid Build Coastguard Worker if (!UncheckedMalloc(alloc_size, result)) 43*6777b538SAndroid Build Coastguard Worker return false; 44*6777b538SAndroid Build Coastguard Worker 45*6777b538SAndroid Build Coastguard Worker memset(*result, 0, alloc_size); 46*6777b538SAndroid Build Coastguard Worker return true; 47*6777b538SAndroid Build Coastguard Worker } 48*6777b538SAndroid Build Coastguard Worker 49*6777b538SAndroid Build Coastguard Worker #endif // !BUILDFLAG(IS_APPLE) || BUILDFLAG(USE_PARTITION_ALLOC_AS_MALLOC) 50*6777b538SAndroid Build Coastguard Worker 51*6777b538SAndroid Build Coastguard Worker namespace internal { ReleaseAddressSpaceReservation()52*6777b538SAndroid Build Coastguard Workerbool ReleaseAddressSpaceReservation() { 53*6777b538SAndroid Build Coastguard Worker #if BUILDFLAG(USE_PARTITION_ALLOC) 54*6777b538SAndroid Build Coastguard Worker return partition_alloc::ReleaseReservation(); 55*6777b538SAndroid Build Coastguard Worker #else 56*6777b538SAndroid Build Coastguard Worker return false; 57*6777b538SAndroid Build Coastguard Worker #endif 58*6777b538SAndroid Build Coastguard Worker } 59*6777b538SAndroid Build Coastguard Worker } // namespace internal 60*6777b538SAndroid Build Coastguard Worker 61*6777b538SAndroid Build Coastguard Worker } // namespace base 62