From: Ian Gudger Date: Fri, 22 Jul 2016 23:38:27 +0000 (-0700) Subject: syscall: validate ParseUnixCredentials inputs X-Git-Tag: go1.8beta1~1758 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=7995cb86e54345cb2e3911bce4da00fbb68c2dce;p=gostls13.git 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 TryBot-Result: Gobot Gobot Reviewed-by: Brad Fitzpatrick --- 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 }