use physical memory in kib to avoid overflow of size_t (issue #1010)

This commit is contained in:
daanx 2025-02-11 09:18:23 -08:00
parent ec4aa62b65
commit 0c8069adab
2 changed files with 4 additions and 3 deletions

View file

@ -142,8 +142,9 @@ void _mi_prim_mem_init( mi_os_mem_config_t* config )
config->alloc_granularity = (size_t)psize;
#if defined(_SC_PHYS_PAGES)
long pphys = sysconf(_SC_PHYS_PAGES);
if (pphys > 0 && (size_t)pphys < (SIZE_MAX/(size_t)psize)) {
config->physical_memory_in_kib = (size_t)pphys * ((size_t)psize / MI_KiB);
const size_t psize_in_kib = (size_t)psize / MI_KiB;
if (psize_in_kib > 0 && pphys > 0 && (size_t)pphys <= (SIZE_MAX/psize_in_kib)) {
config->physical_memory_in_kib = (size_t)pphys * psize_in_kib;
}
#endif
}

View file

@ -154,7 +154,7 @@ void _mi_prim_mem_init( mi_os_mem_config_t* config )
if (pGetPhysicallyInstalledSystemMemory != NULL) {
ULONGLONG memInKiB = 0;
if ((*pGetPhysicallyInstalledSystemMemory)(&memInKiB)) {
if (memInKiB > 0 && memInKiB < (SIZE_MAX / MI_KiB)) {
if (memInKiB > 0 && memInKiB <= SIZE_MAX) {
config->physical_memory_in_kib = memInKiB;
}
}