fix: excise abort_report_np usage in MAS (#49811)

* fix: excise abort_report_np usage in MAS

Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>

* chore: fix it harder

Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>

* chore: fixup patches

---------

Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com>
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
This commit is contained in:
trop[bot]
2026-02-17 10:10:23 +01:00
committed by GitHub
parent c99a47c98b
commit c5890eb77b

View File

@@ -61,6 +61,127 @@ index d68e37353cb4c5037b080f9a23dc252bbba2db4a..7b101305f8986cb5d1e8c0ac60f48ddc
]
# Used by metrics/crc32
diff --git a/base/allocator/BUILD.gn b/base/allocator/BUILD.gn
index 2cc49d83a83c6c64780da3f2caa009908a36dd7c..e2941ac5177d3ca59859482b668b716f58d6f5d4 100644
--- a/base/allocator/BUILD.gn
+++ b/base/allocator/BUILD.gn
@@ -28,6 +28,7 @@ if (is_apple) {
deps = [
":buildflags",
"//base/allocator/partition_allocator:buildflags",
+ "//electron/build/config:generate_mas_config",
]
}
}
diff --git a/base/allocator/early_zone_registration_apple.cc b/base/allocator/early_zone_registration_apple.cc
index 416e541436d201aabca26cdbf7e8477103bd014c..8c5f92b03d67e5f0587b0e94209690611e3b082a 100644
--- a/base/allocator/early_zone_registration_apple.cc
+++ b/base/allocator/early_zone_registration_apple.cc
@@ -197,15 +197,33 @@ void EarlyMallocZoneRegistration() {
// a duplicate even when a binary copy of this code exists.
if (allocator_shim::IsZoneAlreadyRegistered(
allocator_shim::kDelegatingZoneName)) {
+#if !IS_MAS_BUILD()
abort_report_np(
"The delegating default zone has unexpectedly already been "
"registered.");
+#else
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wunsafe-buffer-usage"
+ os_log_fault(OS_LOG_DEFAULT, "The delegating default zone "
+ "has unexpectedly already been registered.");
+#pragma clang diagnostic pop
+ abort();
+#endif
}
if (allocator_shim::IsZoneAlreadyRegistered(
allocator_shim::kPartitionAllocZoneName)) {
+#if !IS_MAS_BUILD()
abort_report_np(
"The PartitionAlloc default zone has unexpectedly already been "
"registered.");
+#else
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wunsafe-buffer-usage"
+ os_log_fault(OS_LOG_DEFAULT, "The PartitionAlloc default zone "
+ "has unexpectedly already been registered.");
+#pragma clang diagnostic pop
+ abort();
+#endif
}
// Register puts the new zone at the end, unregister swaps the new zone with
@@ -229,7 +247,16 @@ void EarlyMallocZoneRegistration() {
// Sanity check.
if (allocator_shim::GetDefaultMallocZoneOrDie() != &g_delegating_zone) {
+#if !IS_MAS_BUILD()
abort_report_np("Failed to install the delegating zone as default.");
+#else
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wunsafe-buffer-usage"
+ os_log_fault(OS_LOG_DEFAULT, "Failed to install the delegating zone "
+ "as default.");
+#pragma clang diagnostic pop
+ abort();
+#endif
}
}
diff --git a/base/allocator/partition_allocator/src/partition_alloc/BUILD.gn b/base/allocator/partition_allocator/src/partition_alloc/BUILD.gn
index 995598ce2d5c4a1a4531784753ca7e2203233c14..7ebaaaffe78fe575ae545617e54e1a53a3c98d6b 100644
--- a/base/allocator/partition_allocator/src/partition_alloc/BUILD.gn
+++ b/base/allocator/partition_allocator/src/partition_alloc/BUILD.gn
@@ -966,6 +966,7 @@ if (is_clang_or_gcc) {
":allocator_base",
":allocator_core",
":buildflags",
+ "//electron/build/config:generate_mas_config",
]
}
} # if (is_clang_or_gcc)
diff --git a/base/allocator/partition_allocator/src/partition_alloc/shim/early_zone_registration_utils_apple.h b/base/allocator/partition_allocator/src/partition_alloc/shim/early_zone_registration_utils_apple.h
index 725b3d78c27d9621500d8193b0b4e45c6103cff0..cd3580fb4b7261b5d8e6ff691214e432c0170dc4 100644
--- a/base/allocator/partition_allocator/src/partition_alloc/shim/early_zone_registration_utils_apple.h
+++ b/base/allocator/partition_allocator/src/partition_alloc/shim/early_zone_registration_utils_apple.h
@@ -12,16 +12,21 @@
#include <mach/mach.h>
#include <malloc/malloc.h>
+#include <os/log.h>
#include <span>
#include <string_view>
+#include "electron/mas.h"
+
+#if !IS_MAS_BUILD()
extern "C" {
// abort_report_np() records the message in a special section that both the
// system CrashReporter and Crashpad collect in crash reports. See also in
// chrome_exe_main_mac.cc.
void abort_report_np(const char* fmt, ...);
} // extern "C"
+#endif
namespace allocator_shim {
@@ -34,7 +39,15 @@ inline std::span<malloc_zone_t*> GetMallocZonesOrDie() {
kern_return_t result = malloc_get_all_zones(
mach_task_self(), /*reader=*/nullptr, &zones, &zone_count);
if (result != KERN_SUCCESS) [[unlikely]] {
+#if !IS_MAS_BUILD()
abort_report_np("Cannot enumerate malloc zones.");
+#else
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wunsafe-buffer-usage"
+ os_log_fault(OS_LOG_DEFAULT, "Cannot enumerate malloc zones.");
+#pragma clang diagnostic pop
+ abort();
+#endif
}
// This is not guaranteed by the C++ standard, but commonly satisfied.
// It must be safe to assume the same memory layout for arrays of two
diff --git a/base/enterprise_util_mac.mm b/base/enterprise_util_mac.mm
index 4bf9a3c27e05c6635b2beb8e880b5b43dbed61b5..f328fbb49c45991f44a9c75325491d0873746b61 100644
--- a/base/enterprise_util_mac.mm
@@ -1315,7 +1436,7 @@ index d145bdb3f879ae7e2d77f3b58fe7abd09d6f7255..8973f310aa62b59bc829e8e0f8ed068b
source_set("sandbox_unittests") {
diff --git a/sandbox/mac/sandbox_logging.cc b/sandbox/mac/sandbox_logging.cc
index 950cf7cfee4e11766dccf5c0bf3f15a8562f0f1e..a5adaaabdbbd91fedbc4cb679c865bc342536090 100644
index 950cf7cfee4e11766dccf5c0bf3f15a8562f0f1e..2d99498b83180f1aa4b79cfab0ea2b1f27080106 100644
--- a/sandbox/mac/sandbox_logging.cc
+++ b/sandbox/mac/sandbox_logging.cc
@@ -21,6 +21,7 @@
@@ -1338,18 +1459,19 @@ index 950cf7cfee4e11766dccf5c0bf3f15a8562f0f1e..a5adaaabdbbd91fedbc4cb679c865bc3
namespace sandbox::logging {
@@ -81,9 +84,11 @@ void SendOsLog(Level level, const char* message) {
sandbox::crash_message::SetCrashMessage(message);
@@ -82,7 +85,12 @@ void SendOsLog(Level level, const char* message) {
}
+#if !IS_MAS_BUILD()
if (level == Level::FATAL) {
+#if !IS_MAS_BUILD()
abort_report_np(message);
}
+#else
+ os_log_fault(OS_LOG_DEFAULT, "%s", message);
+ abort();
+#endif
}
}
// |error| is strerror(errno) when a P* logging function is called. Pass
diff --git a/sandbox/mac/sandbox_serializer.cc b/sandbox/mac/sandbox_serializer.cc
index 0e6e650f88e6aadd46bec96a8b41768c37d7cc6a..a6830e3f886e408c254ccd1c2b1d5c15cd3bcb92 100644
--- a/sandbox/mac/sandbox_serializer.cc