diff options
author | Paul Holzinger <pholzing@redhat.com> | 2021-09-01 15:56:25 +0200 |
---|---|---|
committer | Paul Holzinger <pholzing@redhat.com> | 2021-09-01 16:14:40 +0200 |
commit | abdedc31a25e74866c8afef115d3f87c3b808741 (patch) | |
tree | 692dc200f3fbcbc1a032b48c9573dd5f51e60030 /pkg/rootlessport/rootlessport_linux.go | |
parent | bebaef26fdd5d3ae8a29f04d36c437f316fc1bc8 (diff) | |
download | podman-abdedc31a25e74866c8afef115d3f87c3b808741.tar.gz podman-abdedc31a25e74866c8afef115d3f87c3b808741.tar.bz2 podman-abdedc31a25e74866c8afef115d3f87c3b808741.zip |
rootlessport: allow socket paths with more than 108 chars
Creating the rootlessport socket can fail with `bind: invalid argument`
when the socket path is longer than 108 chars. This is the case for
users with a long runtime directory.
Since the kernel does not allow to use socket paths with more then 108
chars use a workaround to open the socket path.
[NO TESTS NEEDED]
Signed-off-by: Paul Holzinger <pholzing@redhat.com>
Diffstat (limited to 'pkg/rootlessport/rootlessport_linux.go')
-rw-r--r-- | pkg/rootlessport/rootlessport_linux.go | 12 |
1 files changed, 11 insertions, 1 deletions
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) } |