]> git.ipfire.org Git - thirdparty/knot-dns.git/commitdiff
tcp: don't continue if getpeername failed
authorDaniel Salzman <daniel.salzman@nic.cz>
Tue, 27 Feb 2018 17:07:08 +0000 (18:07 +0100)
committerDaniel Salzman <daniel.salzman@nic.cz>
Tue, 27 Feb 2018 17:07:08 +0000 (18:07 +0100)
src/knot/server/tcp-handler.c

index 54ca61058f54fc35f26f265c72be0d1180006e4d..f2db71c63f5dd7867b8c5bf2eefdec4932d40041 100644 (file)
@@ -97,8 +97,14 @@ static bool tcp_send_state(int state)
 static int tcp_handle(tcp_context_t *tcp, int fd,
                       struct iovec *rx, struct iovec *tx)
 {
+       /* Get peer name. */
+       struct sockaddr_storage ss;
+       socklen_t addrlen = sizeof(struct sockaddr_storage);
+       if (getpeername(fd, (struct sockaddr *)&ss, &addrlen) != 0) {
+               return KNOT_EINVAL;
+       }
+
        /* Create query processing parameter. */
-       struct sockaddr_storage ss = { 0 };
        knotd_qdata_params_t params = {
                .remote = &ss,
                .socket = fd,
@@ -109,12 +115,6 @@ static int tcp_handle(tcp_context_t *tcp, int fd,
        rx->iov_len = KNOT_WIRE_MAX_PKTSIZE;
        tx->iov_len = KNOT_WIRE_MAX_PKTSIZE;
 
-       /* Receive peer name. */
-       socklen_t addrlen = sizeof(struct sockaddr_storage);
-       if (getpeername(fd, (struct sockaddr *)&ss, &addrlen) < 0) {
-               ;
-       }
-
        /* Timeout. */
        rcu_read_lock();
        int timeout = 1000 * conf()->cache.srv_tcp_reply_timeout;