aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Gudger <igudger@google.com>2016-07-22 16:38:27 -0700
committerBrad Fitzpatrick <bradfitz@golang.org>2016-08-20 21:12:07 +0000
commit7995cb86e54345cb2e3911bce4da00fbb68c2dce (patch)
tree67c42611ccf596bdcde07fff0feebe5627018033
parentfa897643a18d71a62bade50f80171f5e58449f5a (diff)
downloadgo-7995cb86e54345cb2e3911bce4da00fbb68c2dce.tar.xz
syscall: validate ParseUnixCredentials inputs
Don't panic, crash, or return references to uninitialized memory when ParseUnixCredentials is passed invalid input. Fixes #16475 Change-Id: I140d41612e8cd8caaa94be829a415159659c217b Reviewed-on: https://go-review.googlesource.com/25154 Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
-rw-r--r--src/syscall/sockcmsg_linux.go3
1 files changed, 3 insertions, 0 deletions
diff --git a/src/syscall/sockcmsg_linux.go b/src/syscall/sockcmsg_linux.go
index 5a56b25beb..4cb9075ba8 100644
--- a/src/syscall/sockcmsg_linux.go
+++ b/src/syscall/sockcmsg_linux.go
@@ -31,6 +31,9 @@ func ParseUnixCredentials(m *SocketControlMessage) (*Ucred, error) {
if m.Header.Type != SCM_CREDENTIALS {
return nil, EINVAL
}
+ if uintptr(len(m.Data)) < unsafe.Sizeof(Ucred{}) {
+ return nil, EINVAL
+ }
ucred := *(*Ucred)(unsafe.Pointer(&m.Data[0]))
return &ucred, nil
}