diff --git a/pkg/sentry/socket/socket.go b/pkg/sentry/socket/socket.go index 5e9dc097c..37c866576 100644 --- a/pkg/sentry/socket/socket.go +++ b/pkg/sentry/socket/socket.go @@ -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) { diff --git a/pkg/sentry/socket/unix/unix.go b/pkg/sentry/socket/unix/unix.go index fa8bd978e..c7baf5793 100644 --- a/pkg/sentry/socket/unix/unix.go +++ b/pkg/sentry/socket/unix/unix.go @@ -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 diff --git a/pkg/sentry/strace/BUILD b/pkg/sentry/strace/BUILD index 45a8718e4..a8c3e352d 100644 --- a/pkg/sentry/strace/BUILD +++ b/pkg/sentry/strace/BUILD @@ -39,6 +39,7 @@ go_library( "//pkg/sentry/kernel", "//pkg/sentry/socket", "//pkg/sentry/socket/netlink", + "//pkg/sentry/socket/unix", "//pkg/sentry/syscalls/linux", ], ) diff --git a/pkg/sentry/strace/socket.go b/pkg/sentry/strace/socket.go index ca3337411..2766df9be 100644 --- a/pkg/sentry/strace/socket.go +++ b/pkg/sentry/strace/socket.go @@ -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 {