From c30d5b009fe838a060384a484e061d089cd12b50 Mon Sep 17 00:00:00 2001 From: lixiang Date: Tue, 12 Sep 2023 09:14:24 +0800 Subject: [PATCH] TicketNo:DTS2023090806536 Change-Id: I3d571e1f874304e09edfd01c1406af0874e2be70 Signed-off-by: lixiang --- .../cpp/include/purgeable_mem_base.h | 4 ++++ libpurgeablemem/cpp/src/purgeable_ashmem.cpp | 17 ++++++++++++++--- libpurgeablemem/cpp/src/purgeable_mem.cpp | 16 ++++++++++++---- 3 files changed, 30 insertions(+), 7 deletions(-) diff --git a/libpurgeablemem/cpp/include/purgeable_mem_base.h b/libpurgeablemem/cpp/include/purgeable_mem_base.h index f16187b..df649fd 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 70b438d..ba27b2c 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 1ee83a0..289c1f5 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 -- Gitee