diff --git a/libpurgeablemem/cpp/include/purgeable_mem_base.h b/libpurgeablemem/cpp/include/purgeable_mem_base.h index f16187b9459e5a53aa85c7e2ba0bb52737ec75c8..aa81f402eb0733cebde2eef943f0ee54ba7aefdc 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_PURGEABLE_MEMORY +#define OHOS_MAXIMUM_PURGEABLE_MEMORY ((1024) * (1024) * (1024)) /* 1G */ +#endif /* OHOS_MAXIMUM_PURGEABLE_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..068f7083f375a60b778ef3d95619f74d2801111f 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_PURGEABLE_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_PURGEABLE_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..c7b9b1be08e969c6e9cf543906abce672439a5a3 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_PURGEABLE_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_PURGEABLE_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