syscall: port fix for netbsd unix sockets from upstream
authorNikhil Benesch <nikhil.benesch@gmail.com>
Tue, 13 Oct 2020 07:06:11 +0000 (07:06 +0000)
committerIan Lance Taylor <iant@golang.org>
Wed, 14 Oct 2020 05:19:35 +0000 (22:19 -0700)
NetBSD does not include the null terminator when in its reported socket
length. Port the upstream bugfix for the issue (#6627).

This was likely missed during the usual upstream merge because the gc
and gccgo socket implementations have diverged quite a bit.

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/261741

gcc/go/gofrontend/MERGE
libgo/go/syscall/socket_bsd.go

index 8f71939862b488181e7377dc3062ea5a347c2859..80e702fc3f56efef55c91cb7726b0475dedce33e 100644 (file)
@@ -1,4 +1,4 @@
-fef8afc1876f4a1d5e9a8fd54c21bf5917966e10
+5e76d81ec120e05a59e6c7d173ddf8a3de466bd0
 
 The first line of this file holds the git revision number of the last
 merge done from the gofrontend repository.
index f62457f2bdb6caddfcab072ed5daa43924acee73..40637bc781866ae0eef351d23429e49ea27f4268 100644 (file)
@@ -52,13 +52,19 @@ func (sa *RawSockaddrUnix) setLen(n int) {
 }
 
 func (sa *RawSockaddrUnix) getLen() (int, error) {
-       if sa.Len < 3 || sa.Len > SizeofSockaddrUnix {
+       if sa.Len < 2 || sa.Len > SizeofSockaddrUnix {
                return 0, EINVAL
        }
-       n := int(sa.Len) - 3 // subtract leading Family, Len, terminating NUL.
+
+       // Some BSDs include the trailing NUL in the length, whereas
+       // others do not. Work around this by subtracting the leading
+       // family and len. The path is then scanned to see if a NUL
+       // terminator still exists within the length.
+       n := int(sa.Len) - 2 // subtract leading Family, Len
        for i := 0; i < n; i++ {
                if sa.Path[i] == 0 {
-                       // found early NUL; assume Len is overestimating.
+                       // found early NUL; assume Len included the NUL
+                       // or was overestimating.
                        n = i
                        break
                }