diff options
| author | Dylan DPC <99973273+Dylan-DPC@users.noreply.github.com> | 2022-10-13 18:19:19 +0530 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-10-13 18:19:19 +0530 |
| commit | 376c81c94a05ea13aaef9462cf6ff744b396374f (patch) | |
| tree | 819df076df147bf6509fae8642095a287d8fea80 /library/std/src/sys/unix/thread.rs | |
| parent | ad45dd172213fff157cde566db9fd9279798824e (diff) | |
| parent | b3c21efa8a9c22e8b25136d32b35537856bd9c45 (diff) | |
| download | rust-376c81c94a05ea13aaef9462cf6ff744b396374f.tar.gz rust-376c81c94a05ea13aaef9462cf6ff744b396374f.zip | |
Rollup merge of #102854 - semarie:openbsd-immutablestack, r=m-ou-se
openbsd: don't reallocate a guard page on the stack. the kernel currently enforce that a stack is immutable. calling mmap(2) or mprotect(2) to change it will result in EPERM, which generate a panic!(). so just do like for Linux, and trust the kernel to do the right thing.
Diffstat (limited to 'library/std/src/sys/unix/thread.rs')
| -rw-r--r-- | library/std/src/sys/unix/thread.rs | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/library/std/src/sys/unix/thread.rs b/library/std/src/sys/unix/thread.rs index 7df4add8ce1..42ac6fcd8bf 100644 --- a/library/std/src/sys/unix/thread.rs +++ b/library/std/src/sys/unix/thread.rs @@ -766,6 +766,16 @@ pub mod guard { const GUARD_PAGES: usize = 1; let guard = guardaddr..guardaddr + GUARD_PAGES * page_size; Some(guard) + } else if cfg!(target_os = "openbsd") { + // OpenBSD stack already includes a guard page, and stack is + // immutable. + // + // We'll just note where we expect rlimit to start + // faulting, so our handler can report "stack overflow", and + // trust that the kernel's own stack guard will work. + let stackptr = get_stack_start_aligned()?; + let stackaddr = stackptr.addr(); + Some(stackaddr - page_size..stackaddr) } else { // Reallocate the last page of the stack. // This ensures SIGBUS will be raised on |
