]> git.ipfire.org Git - thirdparty/ulogd2.git/commitdiff
input: UNIXSOCK: remove stat of socket-path
authorJeremy Sowden <jeremy@azazel.net>
Tue, 30 Nov 2021 10:55:36 +0000 (10:55 +0000)
committerPablo Neira Ayuso <pablo@netfilter.org>
Tue, 30 Nov 2021 19:55:17 +0000 (20:55 +0100)
When creating the UNIX socket, there is a TOCTOU race between the
stat(2) and bind(2) calls, and if the path is already bound, the bind(2)
call will fail in any case.  Remove the stat(2) call.

Tidy up a couple of error message.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
input/packet/ulogd_inppkt_UNIXSOCK.c

index 86ab590073d82de858a2a2dc7477e17643e27c5b..3f3abc3a0b776ff3107939a87a6b33cd6c730db2 100644 (file)
@@ -477,12 +477,11 @@ static int _create_unix_socket(const char *unix_path)
        int ret = -1;
        struct sockaddr_un server_sock;
        int s;
-       struct stat st_dummy;
 
        s = socket(AF_UNIX, SOCK_STREAM, 0);
        if (s < 0) {
                ulogd_log(ULOGD_ERROR,
-                               "ulogd2: could not create unix socket\n");
+                         "ulogd2: could not create unix socket\n");
                return -1;
        }
 
@@ -490,19 +489,11 @@ static int _create_unix_socket(const char *unix_path)
        strncpy(server_sock.sun_path, unix_path, sizeof(server_sock.sun_path));
        server_sock.sun_path[sizeof(server_sock.sun_path)-1] = '\0';
 
-       if (stat(unix_path, &st_dummy) == 0 && st_dummy.st_size > 0) {
-               ulogd_log(ULOGD_ERROR,
-                               "ulogd2: unix socket \'%s\' already exists\n",
-                               unix_path);
-               close(s);
-               return -1;
-       }
-
        ret = bind(s, (struct sockaddr *)&server_sock, sizeof(server_sock));
        if (ret < 0) {
                ulogd_log(ULOGD_ERROR,
-                               "ulogd2: could not bind to unix socket \'%s\'\n",
-                               server_sock.sun_path);
+                         "ulogd2: could not bind to unix socket '%s'\n",
+                         server_sock.sun_path);
                close(s);
                return -1;
        }
@@ -510,8 +501,8 @@ static int _create_unix_socket(const char *unix_path)
        ret = listen(s, 10);
        if (ret < 0) {
                ulogd_log(ULOGD_ERROR,
-                               "ulogd2: could not bind to unix socket \'%s\'\n",
-                               server_sock.sun_path);
+                         "ulogd2: could not listen to unix socket '%s'\n",
+                         server_sock.sun_path);
                close(s);
                return -1;
        }