From 3aa50f18a4102429aa40f5d0e518357ceaed2373 Mon Sep 17 00:00:00 2001 From: Michael Pratt Date: Fri, 14 Sep 2018 15:58:56 -0700 Subject: [PATCH] Reuse readlink parameter, add sockaddr max. PiperOrigin-RevId: 213058623 Change-Id: I522598c655d633b9330990951ff1c54d1023ec29 --- pkg/abi/linux/socket.go | 4 ++++ pkg/sentry/fs/host/util_unsafe.go | 5 ++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/pkg/abi/linux/socket.go b/pkg/abi/linux/socket.go index 9a78cc131..19b5fa212 100644 --- a/pkg/abi/linux/socket.go +++ b/pkg/abi/linux/socket.go @@ -140,6 +140,10 @@ const ( SO_TYPE = 3 ) +// SockAddrMax is the maximum size of a struct sockaddr, from +// uapi/linux/socket.h. +const SockAddrMax = 128 + // SockAddrInt is struct sockaddr_in, from uapi/linux/in.h. type SockAddrInet struct { Family uint16 diff --git a/pkg/sentry/fs/host/util_unsafe.go b/pkg/sentry/fs/host/util_unsafe.go index c38d2392d..2ecb54319 100644 --- a/pkg/sentry/fs/host/util_unsafe.go +++ b/pkg/sentry/fs/host/util_unsafe.go @@ -23,6 +23,9 @@ import ( ktime "gvisor.googlesource.com/gvisor/pkg/sentry/kernel/time" ) +// NulByte is a single NUL byte. It is passed to readlinkat as an empty string. +var NulByte byte = '\x00' + func createLink(fd int, name string, linkName string) error { namePtr, err := syscall.BytePtrFromString(name) if err != nil { @@ -50,7 +53,7 @@ func readLink(fd int) (string, error) { n, _, errno := syscall.Syscall6( syscall.SYS_READLINKAT, uintptr(fd), - uintptr(unsafe.Pointer(syscall.StringBytePtr(""))), + uintptr(unsafe.Pointer(&NulByte)), // "" uintptr(unsafe.Pointer(&b[0])), uintptr(l), 0, 0)