diff --git a/libpurgeablemem/cpp/include/purgeable_mem_base.h b/libpurgeablemem/cpp/include/purgeable_mem_base.h index f16187b9459e5a53aa85c7e2ba0bb52737ec75c8..df649fdc844b3695490887ded6b4976a74286680 100644 --- a/libpurgeablemem/cpp/include/purgeable_mem_base.h +++ b/libpurgeablemem/cpp/include/purgeable_mem_base.h @@ -16,6 +16,10 @@ #ifndef OHOS_UTILS_MEMORY_LIBPURGEABLEMEM_CPP_INCLUDE_PURGEABLE_MEM_BASE_H #define OHOS_UTILS_MEMORY_LIBPURGEABLEMEM_CPP_INCLUDE_PURGEABLE_MEM_BASE_H +#ifndef OHOS_MAXIMUM_MEMORY +#define OHOS_MAXIMUM_MEMORY (1024 * 1024 * 1024) +#endif /* OHOS_MAXIMUM_MEMORY */ + #include /* unique_ptr */ #include /* shared_mutex */ #include diff --git a/libpurgeablemem/cpp/src/purgeable_ashmem.cpp b/libpurgeablemem/cpp/src/purgeable_ashmem.cpp index 70b438de040c6b895dd51b11d5cb0d686a6ba190..ba27b2c911ad7c0529adcc2fb3c66e34a5f732a9 100644 --- a/libpurgeablemem/cpp/src/purgeable_ashmem.cpp +++ b/libpurgeablemem/cpp/src/purgeable_ashmem.cpp @@ -65,7 +65,10 @@ PurgeableAshMem::PurgeableAshMem(size_t dataSize, std::unique_ptr= OHOS_MAXIMUM_MEMORY) { + PM_HILOG_DEBUG(LOG_CORE, "Failed to apply for memory"); return; } if (dataPtr_) { @@ -198,11 +202,18 @@ void PurgeableAshMem::ResizeData(size_t newSize) } } dataSizeInput_ = newSize; - CreatePurgeableData_(); + if(!CreatePurgeableData_()) { + PM_HILOG_DEBUG(LOG_CORE, "Failed to create purgeabledata"); + return; + } } bool PurgeableAshMem::ChangeAshmemData(size_t size, int fd, void *data) { + if (size <= 0 || size >= OHOS_MAXIMUM_MEMORY) { + PM_HILOG_DEBUG(LOG_CORE, "Failed to apply for memory"); + return false; + } if (dataPtr_) { if (munmap(dataPtr_, RoundUp(dataSizeInput_, PAGE_SIZE)) != 0) { PM_HILOG_ERROR(LOG_CORE, "%{public}s: munmap dataPtr fail", __func__); diff --git a/libpurgeablemem/cpp/src/purgeable_mem.cpp b/libpurgeablemem/cpp/src/purgeable_mem.cpp index 1ee83a07628925ebe67ea68a40fd5fc6275bd8d1..289c1f5ca5d51505881f42e4bd5a3a741b961cb3 100644 --- a/libpurgeablemem/cpp/src/purgeable_mem.cpp +++ b/libpurgeablemem/cpp/src/purgeable_mem.cpp @@ -45,13 +45,17 @@ PurgeableMem::PurgeableMem(size_t dataSize, std::unique_ptr pageTable_ = nullptr; buildDataCount_ = 0; - if (dataSize == 0) { + if (dataSize <= 0 || dataSize >= OHOS_MAXIMUM_MEMORY) { + PM_HILOG_DEBUG(LOG_CORE, "Failed to apply for memory"); return; } dataSizeInput_ = dataSize; IF_NULL_LOG_ACTION(builder, "%{public}s: input builder nullptr", return); - CreatePurgeableData_(); + if(!CreatePurgeableData_()) { + PM_HILOG_DEBUG(LOG_CORE, "Failed to create purgeabledata"); + return; + } builder_ = std::move(builder); PM_HILOG_DEBUG(LOG_CORE, "%{public}s init succ. %{public}s", __func__, ToString().c_str()); } @@ -123,7 +127,8 @@ int PurgeableMem::GetPinStatus() const void PurgeableMem::ResizeData(size_t newSize) { - if (newSize <= 0) { + if (newSize <= 0 || newSize >= OHOS_MAXIMUM_MEMORY) { + PM_HILOG_DEBUG(LOG_CORE, "Failed to apply for memory"); return; } if (dataPtr_) { @@ -134,7 +139,10 @@ void PurgeableMem::ResizeData(size_t newSize) } } dataSizeInput_ = newSize; - CreatePurgeableData_(); + if(!CreatePurgeableData_()) { + PM_HILOG_DEBUG(LOG_CORE, "Failed to create purgeabledata"); + return; + } } inline std::string PurgeableMem::ToString() const