1
0
mirror of https://github.com/golang/go synced 2024-11-11 19:21:37 -07:00

syscall: remove X__cmsg_data from Cmsghdr

This field is a zero length array and has little use. Since Go 1.5, trailing
zero-length arrays take up space. Both syscall.UnixRights() and
syscall.ParseSocketControlMessage() depend on being able to do an unsafe cast
of socket control message data to Cmsghdr this is only safe if the socket
control message data is greater than or equal to the size of Cmsghdr. Since
control message data that is equal in size to Cmsghdr without X__cmsg_data is
a valid socket control message, we must remove X__cmsg_data or not perform the
unsafe cast.

Removing X__cmsg_data will prevent Go code that uses X__cmsg_data from
compiling, but removing the unsafe cast will cause Go code that uses
X__cmsg_data to fail or exhibit undefined behavior at runtime. It was
therefore decided that removing X__cmsg_data was the better option.

Fixes #17649

Change-Id: I39f323f978eca09d62da5785c5c5c9c7cbdf8c31
Reviewed-on: https://go-review.googlesource.com/32319
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Russ Cox <rsc@golang.org>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
Ian Gudger 2016-10-28 20:09:02 -07:00 committed by Russ Cox
parent ce6aa2ebda
commit 154860ff17
9 changed files with 30 additions and 32 deletions

View File

@ -19,6 +19,12 @@ pkg syscall (darwin-386), const ImplementsGetwd = false
pkg syscall (darwin-386-cgo), const ImplementsGetwd = false pkg syscall (darwin-386-cgo), const ImplementsGetwd = false
pkg syscall (darwin-amd64), const ImplementsGetwd = false pkg syscall (darwin-amd64), const ImplementsGetwd = false
pkg syscall (darwin-amd64-cgo), const ImplementsGetwd = false pkg syscall (darwin-amd64-cgo), const ImplementsGetwd = false
pkg syscall (linux-386), type Cmsghdr struct, X__cmsg_data [0]uint8
pkg syscall (linux-386-cgo), type Cmsghdr struct, X__cmsg_data [0]uint8
pkg syscall (linux-amd64), type Cmsghdr struct, X__cmsg_data [0]uint8
pkg syscall (linux-amd64-cgo), type Cmsghdr struct, X__cmsg_data [0]uint8
pkg syscall (linux-arm), type Cmsghdr struct, X__cmsg_data [0]uint8
pkg syscall (linux-arm-cgo), type Cmsghdr struct, X__cmsg_data [0]uint8
pkg syscall (openbsd-386), const BIOCGRTIMEOUT = 1074283118 pkg syscall (openbsd-386), const BIOCGRTIMEOUT = 1074283118
pkg syscall (openbsd-386), const BIOCSRTIMEOUT = 2148024941 pkg syscall (openbsd-386), const BIOCSRTIMEOUT = 2148024941
pkg syscall (openbsd-386), const RTF_FMASK = 63496 pkg syscall (openbsd-386), const RTF_FMASK = 63496

View File

@ -238,10 +238,9 @@ type Msghdr struct {
} }
type Cmsghdr struct { type Cmsghdr struct {
Len uint32 Len uint32
Level int32 Level int32
Type int32 Type int32
X__cmsg_data [0]uint8
} }
type Inet4Pktinfo struct { type Inet4Pktinfo struct {

View File

@ -242,10 +242,9 @@ type Msghdr struct {
} }
type Cmsghdr struct { type Cmsghdr struct {
Len uint64 Len uint64
Level int32 Level int32
Type int32 Type int32
X__cmsg_data [0]uint8
} }
type Inet4Pktinfo struct { type Inet4Pktinfo struct {

View File

@ -242,10 +242,9 @@ type Msghdr struct {
} }
type Cmsghdr struct { type Cmsghdr struct {
Len uint32 Len uint32
Level int32 Level int32
Type int32 Type int32
X__cmsg_data [0]uint8
} }
type Inet4Pktinfo struct { type Inet4Pktinfo struct {

View File

@ -243,10 +243,9 @@ type Msghdr struct {
} }
type Cmsghdr struct { type Cmsghdr struct {
Len uint64 Len uint64
Level int32 Level int32
Type int32 Type int32
X__cmsg_data [0]uint8
} }
type Inet4Pktinfo struct { type Inet4Pktinfo struct {

View File

@ -244,10 +244,9 @@ type Msghdr struct {
} }
type Cmsghdr struct { type Cmsghdr struct {
Len uint64 Len uint64
Level int32 Level int32
Type int32 Type int32
X__cmsg_data [0]uint8
} }
type Inet4Pktinfo struct { type Inet4Pktinfo struct {

View File

@ -244,10 +244,9 @@ type Msghdr struct {
} }
type Cmsghdr struct { type Cmsghdr struct {
Len uint64 Len uint64
Level int32 Level int32
Type int32 Type int32
X__cmsg_data [0]uint8
} }
type Inet4Pktinfo struct { type Inet4Pktinfo struct {

View File

@ -244,10 +244,9 @@ type Msghdr struct {
} }
type Cmsghdr struct { type Cmsghdr struct {
Len uint64 Len uint64
Level int32 Level int32
Type int32 Type int32
X__cmsg_data [0]uint8
} }
type Inet4Pktinfo struct { type Inet4Pktinfo struct {

View File

@ -244,10 +244,9 @@ type Msghdr struct {
} }
type Cmsghdr struct { type Cmsghdr struct {
Len uint64 Len uint64
Level int32 Level int32
Type int32 Type int32
X__cmsg_data [0]uint8
} }
type Inet4Pktinfo struct { type Inet4Pktinfo struct {