Skip to content

Commit 6fb913b

Browse files
lwintermelongopherbot
authored andcommitted
unix: return early on error in Recvmsg
Currently, Recvmsg may access the rsa buffer even if the underlying syscall returns an error. This change aligns Recvmsg with the safer logic already used in RecvmsgBuffers, ensuring the address is only processed when the syscall succeeds (err == nil). Fixes golang/go#76848 Change-Id: If76477d0362b802e54ee6d27d0e8f57024a8a1dc Reviewed-on: https://go-review.googlesource.com/c/sys/+/734740 Reviewed-by: Junyang Shao <shaojunyang@google.com> Reviewed-by: Ian Lance Taylor <iant@golang.org> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Auto-Submit: Ian Lance Taylor <iant@golang.org> Reviewed-by: Florian Lehner <lehner.florian86@gmail.com> Reviewed-by: Michael Pratt <mpratt@google.com>
1 parent 2f44229 commit 6fb913b

1 file changed

Lines changed: 7 additions & 3 deletions

File tree

unix/syscall_unix.go

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -367,7 +367,9 @@ func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from
367367
iov[0].SetLen(len(p))
368368
}
369369
var rsa RawSockaddrAny
370-
n, oobn, recvflags, err = recvmsgRaw(fd, iov[:], oob, flags, &rsa)
370+
if n, oobn, recvflags, err = recvmsgRaw(fd, iov[:], oob, flags, &rsa); err != nil {
371+
return
372+
}
371373
// source address is only specified if the socket is unconnected
372374
if rsa.Addr.Family != AF_UNSPEC {
373375
from, err = anyToSockaddr(fd, &rsa)
@@ -389,8 +391,10 @@ func RecvmsgBuffers(fd int, buffers [][]byte, oob []byte, flags int) (n, oobn in
389391
}
390392
}
391393
var rsa RawSockaddrAny
392-
n, oobn, recvflags, err = recvmsgRaw(fd, iov, oob, flags, &rsa)
393-
if err == nil && rsa.Addr.Family != AF_UNSPEC {
394+
if n, oobn, recvflags, err = recvmsgRaw(fd, iov, oob, flags, &rsa); err != nil {
395+
return
396+
}
397+
if rsa.Addr.Family != AF_UNSPEC {
394398
from, err = anyToSockaddr(fd, &rsa)
395399
}
396400
return

0 commit comments

Comments
 (0)