diff --git a/libpurgeablemem/c/src/purgeable_mem_c.c b/libpurgeablemem/c/src/purgeable_mem_c.c index 8671c7367062b900872063428d602a804a638196..a9dd887fe56903479360be4076edf0d17d2253c6 100644 --- a/libpurgeablemem/c/src/purgeable_mem_c.c +++ b/libpurgeablemem/c/src/purgeable_mem_c.c @@ -49,6 +49,10 @@ static inline void LogPurgMemInfo_(struct PurgMem *obj) static inline size_t RoundUp(size_t val, size_t align) { + if (val + align < val || val + align < align) { + PM_HILOG_ERROR_C(LOG_CORE, "%{public}s: Addition overflow!", __func__); + return val; + } if (align == 0) { return val; } diff --git a/libpurgeablemem/common/src/ux_page_table_c.c b/libpurgeablemem/common/src/ux_page_table_c.c index de14c4174c27aa63d84b96c189ef50c01b638a1d..050ff248510b083a3ebcf3df584148a78180cbdc 100644 --- a/libpurgeablemem/common/src/ux_page_table_c.c +++ b/libpurgeablemem/common/src/ux_page_table_c.c @@ -92,6 +92,10 @@ static inline size_t GetUxPageSize_(uint64_t dataAddr, size_t dataSize) static inline uint64_t RoundUp(uint64_t val, size_t align) { + if (val + align < val || val + align < align) { + HILOG_ERROR(LOG_CORE, "%{public}s: Addition overflow!", __func__); + return val; + } if (align == 0) { return val; } diff --git a/libpurgeablemem/cpp/src/purgeable_ashmem.cpp b/libpurgeablemem/cpp/src/purgeable_ashmem.cpp index 70b438de040c6b895dd51b11d5cb0d686a6ba190..ee7105712518734c90cb6f9d9946329343546284 100644 --- a/libpurgeablemem/cpp/src/purgeable_ashmem.cpp +++ b/libpurgeablemem/cpp/src/purgeable_ashmem.cpp @@ -32,6 +32,10 @@ namespace PurgeableMem { static inline size_t RoundUp(size_t val, size_t align) { + if (val + align < val || val + align < align) { + PM_HILOG_ERROR(LOG_CORE, "%{public}s: Addition overflow!", __func__); + return val; + } if (align == 0) { return val; } diff --git a/libpurgeablemem/cpp/src/purgeable_mem.cpp b/libpurgeablemem/cpp/src/purgeable_mem.cpp index 1ee83a07628925ebe67ea68a40fd5fc6275bd8d1..7e25796b8d4385b80211f552be4c2bbf0ef6823c 100644 --- a/libpurgeablemem/cpp/src/purgeable_mem.cpp +++ b/libpurgeablemem/cpp/src/purgeable_mem.cpp @@ -32,6 +32,10 @@ namespace PurgeableMem { static inline size_t RoundUp(size_t val, size_t align) { + if (val + align < val || val + align < align) { + PM_HILOG_ERROR(LOG_CORE, "%{public}s: Addition overflow!", __func__); + return val; + } if (align == 0) { return val; } diff --git a/libpurgeablemem/cpp/src/purgeable_mem_base.cpp b/libpurgeablemem/cpp/src/purgeable_mem_base.cpp index 8b4fe8e0efe3debe96a24508976c5b74a39a68c6..779651a6c9e72d0c72f4fcb5e6e7d81da279b973 100644 --- a/libpurgeablemem/cpp/src/purgeable_mem_base.cpp +++ b/libpurgeablemem/cpp/src/purgeable_mem_base.cpp @@ -33,6 +33,10 @@ const int MAX_BUILD_TRYTIMES = 3; static inline size_t RoundUp(size_t val, size_t align) { + if (val + align < val || val + align < align) { + PM_HILOG_ERROR(LOG_CORE, "%{public}s: Addition overflow!", __func__); + return val; + } if (align == 0) { return val; }