unix: fix MmapPtr test failing on OpenBSD

OpenBSD apparently doesn't allow unmapping address space
if part of the region is already unmapped.
This tweaks the test so that munmapping twice no longer happens.

Cq-Include-Trybots: luci.golang.try:gotip-openbsd-amd64
This commit is contained in:
Nuno Cruces
2024-06-26 13:31:08 +01:00
parent daa239428c
commit 2535abd892

View File

@@ -9,7 +9,6 @@ package unix_test
import (
"runtime"
"testing"
"unsafe"
"golang.org/x/sys/unix"
)
@@ -52,23 +51,20 @@ func TestMmap(t *testing.T) {
}
func TestMmapPtr(t *testing.T) {
mmapProt := unix.PROT_NONE
mmapPtrProt := unix.PROT_READ | unix.PROT_WRITE
b, err := unix.Mmap(-1, 0, 2*unix.Getpagesize(), mmapProt, unix.MAP_ANON|unix.MAP_PRIVATE)
p, err := unix.MmapPtr(-1, 0, nil, uintptr(2*unix.Getpagesize()),
unix.PROT_NONE, unix.MAP_ANON|unix.MAP_PRIVATE)
if err != nil {
t.Fatalf("Mmap: %v", err)
}
if _, err := unix.MmapPtr(-1, 0, unsafe.Pointer(&b[0]), uintptr(unix.Getpagesize()),
mmapPtrProt, unix.MAP_ANON|unix.MAP_PRIVATE|unix.MAP_FIXED); err != nil {
t.Fatalf("MmapPtr: %v", err)
}
b[0] = 42
if _, err := unix.MmapPtr(-1, 0, p, uintptr(unix.Getpagesize()),
unix.PROT_READ|unix.PROT_WRITE, unix.MAP_ANON|unix.MAP_PRIVATE|unix.MAP_FIXED); err != nil {
t.Fatalf("MmapPtr: %v", err)
}
if err := unix.MunmapPtr(unsafe.Pointer(&b[0]), uintptr(unix.Getpagesize())); err != nil {
*(*byte)(p) = 42
if err := unix.MunmapPtr(p, uintptr(2*unix.Getpagesize())); err != nil {
t.Fatalf("MunmapPtr: %v", err)
}
if err := unix.Munmap(b); err != nil {
t.Fatalf("Munmap: %v", err)
}
}