windows, unix: fix wrong unsafe.Pointer alignment in syscall

Same as CL 201877 did for package syscall.

Updates golang/go#34972

Change-Id: I3929841ab32378516edafb1f02a84b1bdcc77bbd
Reviewed-on: https://go-review.googlesource.com/c/sys/+/202177
Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
diff --git a/unix/syscall_bsd.go b/unix/syscall_bsd.go
index 3e66714..d52bcc4 100644
--- a/unix/syscall_bsd.go
+++ b/unix/syscall_bsd.go
@@ -237,7 +237,7 @@
 				break
 			}
 		}
-		bytes := (*[10000]byte)(unsafe.Pointer(&pp.Path[0]))[0:n]
+		bytes := (*[len(pp.Path)]byte)(unsafe.Pointer(&pp.Path[0]))[0:n]
 		sa.Name = string(bytes)
 		return sa, nil
 
diff --git a/unix/syscall_linux.go b/unix/syscall_linux.go
index ebf3195..26903bc 100644
--- a/unix/syscall_linux.go
+++ b/unix/syscall_linux.go
@@ -884,7 +884,7 @@
 		for n < len(pp.Path) && pp.Path[n] != 0 {
 			n++
 		}
-		bytes := (*[10000]byte)(unsafe.Pointer(&pp.Path[0]))[0:n]
+		bytes := (*[len(pp.Path)]byte)(unsafe.Pointer(&pp.Path[0]))[0:n]
 		sa.Name = string(bytes)
 		return sa, nil
 
diff --git a/unix/syscall_solaris.go b/unix/syscall_solaris.go
index 62f968c..0e2a696 100644
--- a/unix/syscall_solaris.go
+++ b/unix/syscall_solaris.go
@@ -391,7 +391,7 @@
 		for n < len(pp.Path) && pp.Path[n] != 0 {
 			n++
 		}
-		bytes := (*[10000]byte)(unsafe.Pointer(&pp.Path[0]))[0:n]
+		bytes := (*[len(pp.Path)]byte)(unsafe.Pointer(&pp.Path[0]))[0:n]
 		sa.Name = string(bytes)
 		return sa, nil
 
diff --git a/windows/security_windows.go b/windows/security_windows.go
index c605ee6..d88ed91 100644
--- a/windows/security_windows.go
+++ b/windows/security_windows.go
@@ -229,13 +229,15 @@
 
 // String converts SID to a string format suitable for display, storage, or transmission.
 func (sid *SID) String() string {
+	// From https://docs.microsoft.com/en-us/windows/win32/secbiomet/general-constants
+	const SecurityMaxSidSize = 68
 	var s *uint16
 	e := ConvertSidToStringSid(sid, &s)
 	if e != nil {
 		return ""
 	}
 	defer LocalFree((Handle)(unsafe.Pointer(s)))
-	return UTF16ToString((*[(1 << 30) - 1]uint16)(unsafe.Pointer(s))[:])
+	return UTF16ToString((*[SecurityMaxSidSize]uint16)(unsafe.Pointer(s))[:])
 }
 
 // Len returns the length, in bytes, of a valid security identifier SID.
diff --git a/windows/syscall_windows.go b/windows/syscall_windows.go
index df0ffc6..9035869 100644
--- a/windows/syscall_windows.go
+++ b/windows/syscall_windows.go
@@ -857,7 +857,7 @@
 		for n < len(pp.Path) && pp.Path[n] != 0 {
 			n++
 		}
-		bytes := (*[10000]byte)(unsafe.Pointer(&pp.Path[0]))[0:n]
+		bytes := (*[len(pp.Path)]byte)(unsafe.Pointer(&pp.Path[0]))[0:n]
 		sa.Name = string(bytes)
 		return sa, nil