From 4e3bb5a0c91238c151f94581a846ca0942bdba0f Mon Sep 17 00:00:00 2001 From: Levi Neely Date: Sun, 8 Mar 2026 14:33:06 +0100 Subject: [PATCH] Add overflow-safe allocation wrappers to pmem module --- pclsync/pmem.c | 9 +++++++++ pclsync/pmem.h | 2 ++ 2 files changed, 11 insertions(+) diff --git a/pclsync/pmem.c b/pclsync/pmem.c index e751eaa..af5f074 100644 --- a/pclsync/pmem.c +++ b/pclsync/pmem.c @@ -1,4 +1,6 @@ #include +#include +#include #include "pcompiler.h" #include "psql.h" @@ -60,3 +62,10 @@ int pmem_munlock(void *ptr, size_t size) { void pmem_reset(void *ptr, size_t size) { madvise(ptr, size, MADV_DONTNEED); } + +void *pmem_calloc_safe(size_t nmemb, size_t size) { + if (nmemb != 0 && size > SIZE_MAX / nmemb) { + return NULL; + } + return calloc(nmemb, size); +} diff --git a/pclsync/pmem.h b/pclsync/pmem.h index 394ba1e..685c15d 100644 --- a/pclsync/pmem.h +++ b/pclsync/pmem.h @@ -2,6 +2,7 @@ #define __PMEM_H #include +#include void *pmem_mmap(size_t size); void *pmem_mmap_safe(size_t size); @@ -9,5 +10,6 @@ int pmem_munmap(void *ptr, size_t size); int pmem_mlock(void *ptr, size_t size); int pmem_munlock(void *ptr, size_t size); void pmem_reset(void *ptr, size_t size); +void *pmem_calloc_safe(size_t nmemb, size_t size); #endif \ No newline at end of file