]> Cypherpunks repositories - gostls13.git/commitdiff
syscall: fix wrong unsafe.Pointer alignment in syscall
authorCuong Manh Le <cuong.manhle.vn@gmail.com>
Fri, 18 Oct 2019 03:14:32 +0000 (10:14 +0700)
committerMatthew Dempsky <mdempsky@google.com>
Fri, 18 Oct 2019 19:06:39 +0000 (19:06 +0000)
Caught with:

go test -a -short -gcflags=all=-d=checkptr log/syslog

and:

grep -rE '\*\[([^2]|.{2,})\].*\)\(unsafe.Pointer' syscall

Updates #34972

Change-Id: Iafd199b3a34beb7cc3e88484bf2fbae45183f951
Reviewed-on: https://go-review.googlesource.com/c/go/+/201877
Run-TryBot: Cuong Manh Le <cuong.manhle.vn@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
src/syscall/security_windows.go
src/syscall/syscall_bsd.go
src/syscall/syscall_linux.go
src/syscall/syscall_solaris.go
src/syscall/syscall_windows.go

index db80d98a084d019832c52cce5a77126663951ecc..e35c4a0c258acfb1dce4910c918d263fc82b5ac5 100644 (file)
@@ -157,13 +157,15 @@ func LookupSID(system, account string) (sid *SID, domain string, accType uint32,
 // String converts sid to a string format
 // suitable for display, storage, or transmission.
 func (sid *SID) String() (string, error) {
+       // 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 "", e
        }
        defer LocalFree((Handle)(unsafe.Pointer(s)))
-       return UTF16ToString((*[256]uint16)(unsafe.Pointer(s))[:]), nil
+       return UTF16ToString((*[SecurityMaxSidSize]uint16)(unsafe.Pointer(s))[:]), nil
 }
 
 // Len returns the length, in bytes, of a valid security identifier sid.
index 3d043493871739e24ea6211569b38dac65b85204..fda9d613d3b77383e192adf407564a8d49013312 100644 (file)
@@ -242,7 +242,7 @@ func anyToSockaddr(rsa *RawSockaddrAny) (Sockaddr, error) {
                                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
 
index ed57c93b1f53be6dd5810b2bfbe5ea1ca7ceaad6..2eba033d7c65d265a444f02b9f2c0f26948267c5 100644 (file)
@@ -484,7 +484,7 @@ func anyToSockaddr(rsa *RawSockaddrAny) (Sockaddr, error) {
                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
 
index 425f5122de11e7a74f5e4f8d8670e0bbac95a0fa..daa4b88a71d6fcb6d9d03c3048006d52fd9c135f 100644 (file)
@@ -293,7 +293,7 @@ func anyToSockaddr(rsa *RawSockaddrAny) (Sockaddr, error) {
                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
 
index e4d78d66adaeaa8796890855e7cd680ec2af81b8..0be469eef83177cc36f7d93780e30fbae51df882 100644 (file)
@@ -765,7 +765,7 @@ func (rsa *RawSockaddrAny) Sockaddr() (Sockaddr, error) {
                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