diff options
author | OpenShift Merge Robot <openshift-merge-robot@users.noreply.github.com> | 2021-09-01 12:12:26 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-09-01 12:12:26 -0400 |
commit | fff12da70e1c5c467e1171faf0b5fb3ef1067cfc (patch) | |
tree | e10df2d00846508812232e15feffcb947973f833 | |
parent | f5cfb0da29a8ab07836f5b71816e915e04d5850e (diff) | |
parent | abdedc31a25e74866c8afef115d3f87c3b808741 (diff) | |
download | podman-fff12da70e1c5c467e1171faf0b5fb3ef1067cfc.tar.gz podman-fff12da70e1c5c467e1171faf0b5fb3ef1067cfc.tar.bz2 podman-fff12da70e1c5c467e1171faf0b5fb3ef1067cfc.zip |
Merge pull request #11391 from Luap99/rootlessport-socket
rootlessport: allow socket paths with more than 108 chars
-rw-r--r-- | libpod/networking_slirp4netns.go | 11 | ||||
-rw-r--r-- | pkg/rootlessport/rootlessport_linux.go | 12 |
2 files changed, 12 insertions, 11 deletions
diff --git a/libpod/networking_slirp4netns.go b/libpod/networking_slirp4netns.go index 5858364ff..a09027b72 100644 --- a/libpod/networking_slirp4netns.go +++ b/libpod/networking_slirp4netns.go @@ -632,16 +632,7 @@ func (c *Container) reloadRootlessRLKPortMapping() error { childIP := getRootlessPortChildIP(c) logrus.Debugf("reloading rootless ports for container %s, childIP is %s", c.config.ID, childIP) - var conn net.Conn - var err error - // try three times to connect to the socket, maybe it is not ready yet - for i := 0; i < 3; i++ { - conn, err = net.Dial("unix", filepath.Join(c.runtime.config.Engine.TmpDir, "rp", c.config.ID)) - if err == nil { - break - } - time.Sleep(250 * time.Millisecond) - } + conn, err := openUnixSocket(filepath.Join(c.runtime.config.Engine.TmpDir, "rp", c.config.ID)) if err != nil { // This is not a hard error for backwards compatibility. A container started // with an old version did not created the rootlessport socket. diff --git a/pkg/rootlessport/rootlessport_linux.go b/pkg/rootlessport/rootlessport_linux.go index 9a2f93f8e..730d91aa2 100644 --- a/pkg/rootlessport/rootlessport_linux.go +++ b/pkg/rootlessport/rootlessport_linux.go @@ -218,10 +218,20 @@ outer: // we only need to have a socket to reload ports when we run under rootless cni if cfg.RootlessCNI { - socket, err := net.Listen("unix", filepath.Join(socketDir, cfg.ContainerID)) + // workaround to bypass the 108 char socket path limit + // open the fd and use the path to the fd as bind argument + fd, err := unix.Open(socketDir, unix.O_PATH, 0) if err != nil { return err } + socket, err := net.ListenUnix("unixpacket", &net.UnixAddr{Name: fmt.Sprintf("/proc/self/fd/%d/%s", fd, cfg.ContainerID), Net: "unixpacket"}) + if err != nil { + return err + } + err = unix.Close(fd) + if err != nil { + logrus.Warnf("failed to close the socketDir fd: %v", err) + } defer socket.Close() go serve(socket, driver) } |