$OpenBSD: patch-src_mongo_util_processinfo_openbsd_cpp,v 1.2 2019/01/13 23:18:42 jca Exp $

- avoid use after free
- mincore(2) has been removed

Index: src/mongo/util/processinfo_openbsd.cpp
--- src/mongo/util/processinfo_openbsd.cpp.orig
+++ src/mongo/util/processinfo_openbsd.cpp
@@ -110,9 +110,10 @@ int ProcessInfo::getVirtualMemorySize() {
     }
 
     kinfo_proc* task = kvm_getprocs(kd, KERN_PROC_PID, _pid.toNative(), sizeof(kinfo_proc), &cnt);
-    kvm_close(kd);
-    return ((task->p_vm_dsize + task->p_vm_ssize + task->p_vm_tsize) * sysconf(_SC_PAGESIZE)) /
+    int rss = ((task->p_vm_dsize + task->p_vm_ssize + task->p_vm_tsize) * sysconf(_SC_PAGESIZE)) /
         1048576;
+    kvm_close(kd);
+    return rss;
 }
 
 int ProcessInfo::getResidentSize() {
@@ -124,8 +125,9 @@ int ProcessInfo::getResidentSize() {
         return -1;
     }
     kinfo_proc* task = kvm_getprocs(kd, KERN_PROC_PID, _pid.toNative(), sizeof(kinfo_proc), &cnt);
+    int rss = (task->p_vm_rssize * sysconf(_SC_PAGESIZE)) / 1048576;  // convert from pages to MB
     kvm_close(kd);
-    return (task->p_vm_rssize * sysconf(_SC_PAGESIZE)) / 1048576;  // convert from pages to MB
+    return rss;
 }
 
 double ProcessInfo::getSystemMemoryPressurePercentage() {
@@ -182,28 +184,14 @@ bool ProcessInfo::supported() {
 }
 
 bool ProcessInfo::blockCheckSupported() {
-    return true;
+    return false;
 }
 
 bool ProcessInfo::blockInMemory(const void* start) {
-    char x = 0;
-    if (mincore((void*)alignToStartOfPage(start), getPageSize(), &x)) {
-        log() << "mincore failed: " << errnoWithDescription() << endl;
-        return 1;
-    }
-    return x & 0x1;
+    return false;
 }
 
 bool ProcessInfo::pagesInMemory(const void* start, size_t numPages, vector<char>* out) {
-    out->resize(numPages);
-    // int mincore(const void *addr, size_t len, char *vec);
-    if (mincore((void*)alignToStartOfPage(start), numPages * getPageSize(), &(out->front()))) {
-        log() << "mincore failed: " << errnoWithDescription() << endl;
-        return false;
-    }
-    for (size_t i = 0; i < numPages; ++i) {
-        (*out)[i] = 0x1;
-    }
-    return true;
+    return false;
 }
 }
