mirror of
https://github.com/netbirdio/gvisor.git
synced 2026-05-22 17:12:49 -07:00
Fix strace logging for AF_UNIX sockets.
This was broken in commit 64268c8, which moved parsing of addresses for
AF_UNIX sockets to the socket/unix package.
While we're here, add strace support for AF_PACKET sockets, since
socket.AddressAndFamily can already decode their address.
PiperOrigin-RevId: 661391690
This commit is contained in:
committed by
gVisor bot
parent
01a3927adf
commit
876de08e59
@@ -516,8 +516,8 @@ func BytesToIPAddress(addr []byte) tcpip.Address {
|
||||
}
|
||||
|
||||
// AddressAndFamily reads an sockaddr struct from the given address and
|
||||
// converts it to the FullAddress format. It supports AF_UNIX, AF_INET,
|
||||
// AF_INET6, and AF_PACKET addresses.
|
||||
// converts it to the FullAddress format. It supports AF_INET, AF_INET6, and
|
||||
// AF_PACKET addresses.
|
||||
//
|
||||
// AddressAndFamily returns an address and its family.
|
||||
func AddressAndFamily(addr []byte) (tcpip.FullAddress, uint16, *syserr.Error) {
|
||||
|
||||
@@ -445,7 +445,7 @@ func (s *Socket) Endpoint() transport.Endpoint {
|
||||
|
||||
// extractPath extracts and validates the address.
|
||||
func extractPath(sockaddr []byte) (string, *syserr.Error) {
|
||||
addr, family, err := addressAndFamily(sockaddr)
|
||||
addr, family, err := AddressAndFamily(sockaddr)
|
||||
if err != nil {
|
||||
if err == syserr.ErrAddressFamilyNotSupported {
|
||||
err = syserr.ErrInvalidArgument
|
||||
@@ -466,7 +466,9 @@ func extractPath(sockaddr []byte) (string, *syserr.Error) {
|
||||
return p, nil
|
||||
}
|
||||
|
||||
func addressAndFamily(addr []byte) (transport.Address, uint16, *syserr.Error) {
|
||||
// AddressAndFamily converts the addr byte slice to a transport.Address and
|
||||
// family. It supports only AF_UNIX addresses.
|
||||
func AddressAndFamily(addr []byte) (transport.Address, uint16, *syserr.Error) {
|
||||
// Make sure we have at least 2 bytes for the address family.
|
||||
if len(addr) < 2 {
|
||||
return transport.Address{}, 0, syserr.ErrInvalidArgument
|
||||
|
||||
@@ -39,6 +39,7 @@ go_library(
|
||||
"//pkg/sentry/kernel",
|
||||
"//pkg/sentry/socket",
|
||||
"//pkg/sentry/socket/netlink",
|
||||
"//pkg/sentry/socket/unix",
|
||||
"//pkg/sentry/syscalls/linux",
|
||||
],
|
||||
)
|
||||
|
||||
@@ -26,6 +26,7 @@ import (
|
||||
"gvisor.dev/gvisor/pkg/sentry/kernel"
|
||||
"gvisor.dev/gvisor/pkg/sentry/socket"
|
||||
"gvisor.dev/gvisor/pkg/sentry/socket/netlink"
|
||||
"gvisor.dev/gvisor/pkg/sentry/socket/unix"
|
||||
slinux "gvisor.dev/gvisor/pkg/sentry/syscalls/linux"
|
||||
)
|
||||
|
||||
@@ -345,17 +346,18 @@ func sockAddr(t *kernel.Task, addr hostarch.Addr, length uint32) string {
|
||||
familyStr := SocketFamily.Parse(uint64(family))
|
||||
|
||||
switch family {
|
||||
case linux.AF_INET, linux.AF_INET6, linux.AF_UNIX:
|
||||
case linux.AF_INET, linux.AF_INET6, linux.AF_PACKET:
|
||||
fa, _, err := socket.AddressAndFamily(b)
|
||||
if err != nil {
|
||||
return fmt.Sprintf("%#x {Family: %s, error extracting address: %v}", addr, familyStr, err)
|
||||
}
|
||||
|
||||
if family == linux.AF_UNIX {
|
||||
return fmt.Sprintf("%#x {Family: %s, Addr: %q}", addr, familyStr, string(fa.Addr.AsSlice()))
|
||||
}
|
||||
|
||||
return fmt.Sprintf("%#x {Family: %s, Addr: %v, Port: %d}", addr, familyStr, fa.Addr, fa.Port)
|
||||
case linux.AF_UNIX:
|
||||
fa, _, err := unix.AddressAndFamily(b)
|
||||
if err != nil {
|
||||
return fmt.Sprintf("%#x {Family: %s, error extracting address: %v}", addr, familyStr, err)
|
||||
}
|
||||
return fmt.Sprintf("%#x {Family: %s, Addr: %q}", addr, familyStr, fa.Addr)
|
||||
case linux.AF_NETLINK:
|
||||
sa, err := netlink.ExtractSockAddr(b)
|
||||
if err != nil {
|
||||
|
||||
Reference in New Issue
Block a user