From 28b5a6537d7fcd5a9cb51451d2cf29959babe69d Mon Sep 17 00:00:00 2001 From: ranshid <88133677+ranshid@users.noreply.github.com> Date: Thu, 16 Dec 2021 07:38:45 +0200 Subject: [PATCH] Throw error on too long unix domain socket file path (#9826) * Fix too long unix domain socket file path Co-authored-by: Madelyn Olson --- src/anet.c | 4 ++++ src/server.c | 5 +++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/anet.c b/src/anet.c index 3e305a200..b65301243 100644 --- a/src/anet.c +++ b/src/anet.c @@ -479,6 +479,10 @@ int anetUnixServer(char *err, char *path, mode_t perm, int backlog) int s; struct sockaddr_un sa; + if (strlen(path) > sizeof(sa.sun_path)-1) { + anetSetError(err,"unix socket path too long (%zu), must be under %zu", strlen(path), sizeof(sa.sun_path)); + return ANET_ERR; + } if ((s = anetCreateSocket(err,AF_LOCAL)) == ANET_ERR) return ANET_ERR; diff --git a/src/server.c b/src/server.c index d2e4ec661..0abf20dcd 100644 --- a/src/server.c +++ b/src/server.c @@ -2281,7 +2281,7 @@ void initServer(void) { server.sofd = anetUnixServer(server.neterr,server.unixsocket, (mode_t)server.unixsocketperm, server.tcp_backlog); if (server.sofd == ANET_ERR) { - serverLog(LL_WARNING, "Opening Unix socket: %s", server.neterr); + serverLog(LL_WARNING, "Failed opening Unix socket: %s", server.neterr); exit(1); } anetNonBlock(NULL,server.sofd); @@ -3518,7 +3518,8 @@ void closeListeningSockets(int unlink_unix_socket) { for (j = 0; j < server.cfd.count; j++) close(server.cfd.fd[j]); if (unlink_unix_socket && server.unixsocket) { serverLog(LL_NOTICE,"Removing the unix socket file."); - unlink(server.unixsocket); /* don't care if this fails */ + if (unlink(server.unixsocket) != 0) + serverLog(LL_WARNING,"Error removing the unix socket file: %s",strerror(errno)); } }