From 93715e7602472c8dbd22f1aba3d782be97399a33 Mon Sep 17 00:00:00 2001 From: brl Date: Sat, 6 Jun 2015 19:05:11 -0400 Subject: [PATCH] set SO_PASSCRED on listening socket to avoid this problem: https://gitlab.com/amonthedeamon/linux-kernel-test/commit/4dde1cb060276e93a2ed22e4a167fc260a9d8c23 --- ipc/ipc.go | 3 +++ ipc/util.go | 5 ++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/ipc/ipc.go b/ipc/ipc.go index 71f74b3..72555a9 100644 --- a/ipc/ipc.go +++ b/ipc/ipc.go @@ -42,6 +42,9 @@ func NewServer(address string, factory MsgFactory, log *logging.Logger, handlers } listener, err := net.ListenUnix("unix", &net.UnixAddr{address, "unix"}) + if err := setPassCred(listener); err != nil { + return nil, errors.New("Failed to set SO_PASSCRED on listening socket: " + err.Error()) + } if err != nil { md.close() return nil, err diff --git a/ipc/util.go b/ipc/util.go index f056a90..4873649 100644 --- a/ipc/util.go +++ b/ipc/util.go @@ -1,17 +1,16 @@ package ipc import ( - "net" "reflect" "syscall" ) -func setPassCred(c net.Conn) error { +func setPassCred(c interface{}) error { fd := reflectFD(c) return syscall.SetsockoptInt(fd, syscall.SOL_SOCKET, syscall.SO_PASSCRED, 1) } -func reflectFD(c net.Conn) int { +func reflectFD(c interface{}) int { sysfd := extractField(c, "fd", "sysfd") return int(sysfd.Int()) }