[PATCH] virhostmem: Get total memory on macOS properly

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Problem with HW_PHYSMEM sysctl on 64-bit macOS is that it
returns a 32-bit signed value. Thus it overflows. Switching to
HW_MEMSIZE is recommended as it's of an uint_64 type [1].

1: https://github.com/apple-oss-distributions/xnu/blob/xnu-10002.1.13/bsd/sys/sysctl.h

Reported-by: Jaroslav Suchanek <jsuchane@xxxxxxxxxx>
Signed-off-by: Michal Privoznik <mprivozn@xxxxxxxxxx>
---
 src/util/virhostmem.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/src/util/virhostmem.c b/src/util/virhostmem.c
index 1da2759ac3..a7027af835 100644
--- a/src/util/virhostmem.c
+++ b/src/util/virhostmem.c
@@ -617,7 +617,10 @@ virHostMemGetTotal(void)
     unsigned long long physmem = 0;
     size_t len = sizeof(physmem);
 
-    if (sysctlbyname("hw.physmem", &physmem, &len, NULL, 0) < 0) {
+    /* On macOS hw.physmem is int32_t which doesn't fly with >4GiB of memory.
+     * But hw.memsize is uint64_t. */
+    if (sysctlbyname("hw.memsize", &physmem, &len, NULL, 0) < 0 &&
+        sysctlbyname("hw.physmem", &physmem, &len, NULL, 0) < 0) {
         virReportSystemError(errno, "%s",
                              _("Unable to query memory total"));
         return 0;
-- 
2.41.0

_______________________________________________
Devel mailing list -- devel@xxxxxxxxxxxxxxxxx
To unsubscribe send an email to devel-leave@xxxxxxxxxxxxxxxxx




[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux