[compiler-rt] [compiler-rt] fix BSD procmaps stack size limit on build due to the k… (PR #82887)

David CARLIER via llvm-commits llvm-commits at lists.llvm.org
Sat Feb 24 07:39:16 PST 2024


https://github.com/devnexen created https://github.com/llvm/llvm-project/pull/82887

…info_proc type.

>From 3acc8e2e4c8d4db7a24b20a4e7a3c3d22e2a6ffe Mon Sep 17 00:00:00 2001
From: David Carlier <devnexen at gmail.com>
Date: Sat, 24 Feb 2024 15:37:09 +0000
Subject: [PATCH] [compiler-rt] fix BSD procmaps stack size limit on build due
 to the kinfo_proc type.

---
 .../lib/sanitizer_common/sanitizer_procmaps_bsd.cpp   | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_procmaps_bsd.cpp b/compiler-rt/lib/sanitizer_common/sanitizer_procmaps_bsd.cpp
index dcfd94fe3225cd..3649bfd1b25b12 100644
--- a/compiler-rt/lib/sanitizer_common/sanitizer_procmaps_bsd.cpp
+++ b/compiler-rt/lib/sanitizer_common/sanitizer_procmaps_bsd.cpp
@@ -37,10 +37,13 @@ void GetMemoryProfile(fill_profile_f cb, uptr *stats) {
     getpid()
   }; 
 
-  struct kinfo_proc InfoProc;
-  uptr Len = sizeof(InfoProc);
-  CHECK_EQ(internal_sysctl(Mib, ARRAY_SIZE(Mib), nullptr, (uptr *)&InfoProc, &Len, 0), 0);
-  cb(0, InfoProc.ki_rssize * GetPageSizeCached(), false, stats);
+  struct kinfo_proc *InfoProc;
+  uptr Len = sizeof(*InfoProc);
+  uptr Size = Len;
+  InfoProc = (struct kinfo_proc *)MmapOrDie(Size, "GetMemoryProfile()");
+  CHECK_EQ(internal_sysctl(Mib, ARRAY_SIZE(Mib), nullptr, (uptr *)InfoProc, &Len, 0), 0);
+  cb(0, InfoProc->ki_rssize * GetPageSizeCached(), false, stats);
+  UnmapOrDie(InfoProc, Size, true);
 }
 #endif
 



More information about the llvm-commits mailing list