windows: allocate SECURITY_DESCRIPTOR with uintptr alignment
This struct has pointers in it, which means checkptr expects for it to
be aligned properly. When we're copying a Windows-allocated struct to a
Go-allocated one, make sure that the Go allocation is aligned to the
pointer size.
This fixes the following checkptr splat:
goroutine 29 [running]:
runtime.throw(0x4f8dd9, 0x3a)
C:/hostedtoolcache/windows/go/1.16.2/x64/src/runtime/panic.go:1117 +0x79 fp=0xc000041c50 sp=0xc000041c20 pc=0x2f9879
runtime.checkptrAlignment(0xc00009c180, 0x4d8a00, 0x1)
C:/hostedtoolcache/windows/go/1.16.2/x64/src/runtime/checkptr.go:20 +0xc9 fp=0xc000041c80 sp=0xc000041c50 pc=0x2c4d09
golang.org/x/sys/windows.(*SECURITY_DESCRIPTOR).copySelfRelativeSecurityDescriptor(0x227284caa00, 0x2)
C:/Users/runneradmin/go/pkg/mod/golang.org/x/sys@v0.0.0-20210309040221-94ec62e08169/windows/security_windows.go:1347 +0x11f fp=0xc000041ce8 sp=0xc000041c80 pc=0x467f9f
golang.org/x/sys/windows.SecurityDescriptorFromString(0x4ebfb0, 0x2, 0x0, 0x0, 0x0)
Change-Id: I7eb9c07e7afb7f139473b660f82a23541663ec50
Reviewed-on: https://go-review.googlesource.com/c/sys/+/306889
Trust: Jason A. Donenfeld <Jason@zx2c4.com>
Trust: Josh Bleecher Snyder <josharian@gmail.com>
Run-TryBot: Jason A. Donenfeld <Jason@zx2c4.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Josh Bleecher Snyder <josharian@gmail.com>
Jason A. Donenfeld
3 years ago
1341 | 1341 | h.Len = sdLen |
1342 | 1342 | h.Cap = sdLen |
1343 | 1343 | |
1344 | dst := make([]byte, sdLen) | |
1344 | const psize = int(unsafe.Sizeof(uintptr(0))) | |
1345 | ||
1346 | var dst []byte | |
1347 | h = (*unsafeheader.Slice)(unsafe.Pointer(&dst)) | |
1348 | alloc := make([]uintptr, (sdLen+psize-1)/psize) | |
1349 | h.Data = (*unsafeheader.Slice)(unsafe.Pointer(&alloc)).Data | |
1350 | h.Len = sdLen | |
1351 | h.Cap = sdLen | |
1352 | ||
1345 | 1353 | copy(dst, src) |
1346 | 1354 | return (*SECURITY_DESCRIPTOR)(unsafe.Pointer(&dst[0])) |
1347 | 1355 | } |