commit 9acfd167fa80e14b7beb1eb29830cb0c7d50e586 (tree)
parent ec25b138481e16f2d73d12ed6ffacd8e7ba65e94
Author: Alex Rønne Petersen <alex@alexrp.com>
Date: Sat, 10 Jan 2026 21:04:20 +0100
std.process: add PermissionDenied to ProtectMemoryError (for OpenBSD)
See EPERM notes on https://man.openbsd.org/mprotect.2.
Diffstat:
1 file changed, 5 insertions(+), 0 deletions(-)
diff --git a/lib/std/process.zig b/lib/std/process.zig
@@ -1004,6 +1004,10 @@ pub fn unlockMemoryAll() UnlockMemoryError!void {
pub const ProtectMemoryError = error{
UnsupportedOperation,
+ /// OpenBSD will refuse to change memory protection if the specified region
+ /// contains any pages that have previously been marked immutable using the
+ /// `mimmutable` function.
+ PermissionDenied,
/// The memory cannot be given the specified access. This can happen, for
/// example, if you memory map a file to which you have read-only access,
/// then use `protectMemory` to mark it writable.
@@ -1052,6 +1056,7 @@ pub fn protectMemory(
};
switch (posix.errno(posix.system.mprotect(memory.ptr, memory.len, flags))) {
.SUCCESS => return,
+ .PERM => return error.PermissionDenied,
.INVAL => |err| return std.Io.Threaded.errnoBug(err),
.ACCES => return error.AccessDenied,
.NOMEM => return error.OutOfMemory,