diff options
author | gVisor bot <gvisor-bot@google.com> | 2020-12-11 21:38:36 +0000 |
---|---|---|
committer | gVisor bot <gvisor-bot@google.com> | 2020-12-11 21:38:36 +0000 |
commit | 3c8ccf6f4509a53312e48b102e4de993c7c31374 (patch) | |
tree | a00e2224ad5189cb6cfaf71af7640135145a7860 /pkg/tcpip | |
parent | 119a97e008cdef89ce5bb4d67bf7738c6840ac48 (diff) | |
parent | d45420b1528b8ad23e8f12fe81fb9cc148b83012 (diff) |
Merge release-20201208.0-34-gd45420b15 (automated)
Diffstat (limited to 'pkg/tcpip')
-rw-r--r-- | pkg/tcpip/transport/raw/endpoint.go | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/pkg/tcpip/transport/raw/endpoint.go b/pkg/tcpip/transport/raw/endpoint.go index 90b032d85..d9a664c03 100644 --- a/pkg/tcpip/transport/raw/endpoint.go +++ b/pkg/tcpip/transport/raw/endpoint.go @@ -227,6 +227,13 @@ func (e *endpoint) Write(p tcpip.Payloader, opts tcpip.WriteOptions) (int64, <-c return 0, nil, tcpip.ErrInvalidOptionValue } + if opts.To != nil { + // Raw sockets do not support sending to a IPv4 address on a IPv6 endpoint. + if e.TransportEndpointInfo.NetProto == header.IPv6ProtocolNumber && len(opts.To.Addr) != header.IPv6AddressSize { + return 0, nil, tcpip.ErrInvalidOptionValue + } + } + n, ch, err := e.write(p, opts) switch err { case nil: @@ -397,6 +404,11 @@ func (*endpoint) Disconnect() *tcpip.Error { // Connect implements tcpip.Endpoint.Connect. func (e *endpoint) Connect(addr tcpip.FullAddress) *tcpip.Error { + // Raw sockets do not support connecting to a IPv4 address on a IPv6 endpoint. + if e.TransportEndpointInfo.NetProto == header.IPv6ProtocolNumber && len(addr.Addr) != header.IPv6AddressSize { + return tcpip.ErrInvalidOptionValue + } + e.mu.Lock() defer e.mu.Unlock() |