Skip to content

Commit e0d141e

Browse files
committed
Memory (BSD): adds underflow protection (should not happen)
1 parent 29eb8bb commit e0d141e

2 files changed

Lines changed: 11 additions & 7 deletions

File tree

src/detection/memory/memory_bsd.c

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,13 @@ const char* ffDetectMemory(FFMemoryResult* ram) {
1111
int32_t pagesFree = ffSysctlGetInt("vm.stats.vm.v_free_count", 0) + ffSysctlGetInt("vm.stats.vm.v_inactive_count", 0) + ffSysctlGetInt("vm.stats.vm.v_cache_count", 0);
1212
int64_t bytesCache = ffSysctlGetInt64("vfs.bufspace", 0);
1313

14+
ram->bytesUsed = ram->bytesTotal - (uint64_t) pagesFree * instance.state.platform.sysinfo.pageSize - (uint64_t) bytesCache;
15+
1416
int64_t bytesArc = ffSysctlGetInt64("kstat.zfs.misc.arcstats.size", 0);
1517
if (bytesArc > 0) bytesArc -= ffSysctlGetInt64("kstat.zfs.misc.arcstats.c_min", 0);
16-
if (bytesArc < 0) bytesArc = 0;
17-
18-
ram->bytesUsed = ram->bytesTotal - (uint64_t) pagesFree * instance.state.platform.sysinfo.pageSize - (uint64_t) bytesCache - (uint64_t) bytesArc;
18+
if (bytesArc > 0 && (uint64_t) bytesArc < ram->bytesUsed) {
19+
ram->bytesUsed -= (uint64_t) bytesArc;
20+
}
1921

2022
return NULL;
2123
}

src/detection/memory/memory_nbsd.c

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,14 @@ const char* ffDetectMemory(FFMemoryResult* ram) {
1111
return "sysctl(CTL_VM, VM_UVMEXP2) failed";
1212
}
1313

14+
ram->bytesTotal = (uint64_t) buf.npages * instance.state.platform.sysinfo.pageSize;
15+
ram->bytesUsed = ((uint64_t) buf.active + (uint64_t) buf.inactive + (uint64_t) buf.wired) * instance.state.platform.sysinfo.pageSize;
16+
1417
int64_t bytesArc = ffSysctlGetInt64("kstat.zfs.misc.arcstats.size", 0);
1518
if (bytesArc > 0) bytesArc -= ffSysctlGetInt64("kstat.zfs.misc.arcstats.c_min", 0);
16-
if (bytesArc < 0) bytesArc = 0;
17-
18-
ram->bytesTotal = (uint64_t) buf.npages * instance.state.platform.sysinfo.pageSize;
19-
ram->bytesUsed = ((uint64_t) buf.active + (uint64_t) buf.inactive + (uint64_t) buf.wired) * instance.state.platform.sysinfo.pageSize - (uint64_t) bytesArc;
19+
if (bytesArc > 0 && (uint64_t) bytesArc < ram->bytesUsed) {
20+
ram->bytesUsed -= (uint64_t) bytesArc;
21+
}
2022

2123
return NULL;
2224
}

0 commit comments

Comments
 (0)