Skip to content

Commit

Permalink
unix: fix MremapPtr test failing on NetBSD
Browse files Browse the repository at this point in the history
NetBSD apparently doesn't allow remapping into used address space.
This means that the test that uses mremap to move a mmapped page
into a new address should first mmap (to reserve)
then munmap (to free) the destination.

Fixes golang/go#68180

Change-Id: If66b67e7166ca4dc4331a8cfc3e3a285416e9849
GitHub-Last-Rev: 92058c2
GitHub-Pull-Request: #198
Cq-Include-Trybots: luci.golang.try:x_sys-gotip-netbsd-amd64
Reviewed-on: https://go-review.googlesource.com/c/sys/+/594756
Reviewed-by: Ian Lance Taylor <[email protected]>
Reviewed-by: Joedian Reid <[email protected]>
Auto-Submit: Dmitri Shuralyov <[email protected]>
LUCI-TryBot-Result: Go LUCI <[email protected]>
  • Loading branch information
ncruces authored and gopherbot committed Jun 26, 2024
1 parent daa2394 commit a0ef40a
Showing 1 changed file with 14 additions and 13 deletions.
27 changes: 14 additions & 13 deletions unix/mremap_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,30 +47,31 @@ func TestMremap(t *testing.T) {
}

func TestMremapPtr(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)
p1, err := unix.MmapPtr(-1, 0, nil, uintptr(2*unix.Getpagesize()),
unix.PROT_READ|unix.PROT_WRITE, 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
p2 := unsafe.Add(p1, unix.Getpagesize())
if err := unix.MunmapPtr(p2, uintptr(unix.Getpagesize())); err != nil {
t.Fatalf("MunmapPtr: %v", err)
}

*(*byte)(p1) = 42

if _, err := unix.MremapPtr(
unsafe.Pointer(&b[0]), uintptr(unix.Getpagesize()),
unsafe.Pointer(&b[unix.Getpagesize()]), uintptr(unix.Getpagesize()),
p1, uintptr(unix.Getpagesize()),
p2, uintptr(unix.Getpagesize()),
unix.MremapFixed|unix.MremapMaymove); err != nil {
t.Fatalf("MremapPtr: %v", err)
}
if got := b[unix.Getpagesize()]; got != 42 {

if got := *(*byte)(p2); got != 42 {
t.Errorf("got %d, want 42", got)
}

if err := unix.Munmap(b); err != nil {
t.Fatalf("Munmap: %v", err)
if err := unix.MunmapPtr(p2, uintptr(unix.Getpagesize())); err != nil {
t.Fatalf("MunmapPtr: %v", err)
}
}

0 comments on commit a0ef40a

Please sign in to comment.