]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
daemon/io: fix insufficient error handling when receiving tls data
authorGrigorii Demidov <grigorii.demidov@nic.cz>
Tue, 27 Nov 2018 14:08:18 +0000 (15:08 +0100)
committerVladimír Čunát <vladimir.cunat@nic.cz>
Wed, 28 Nov 2018 10:31:49 +0000 (11:31 +0100)
daemon/io.c
daemon/session.c

index f203fa90cbe34733a38ae76283cc1553e4861495..d752a51065e0eae676fa04c598ababc4842f5b84 100644 (file)
@@ -222,6 +222,9 @@ static void tcp_recv(uv_stream_t *handle, ssize_t nread, const uv_buf_t *buf)
                /* buf->base points to start of the tls receive buffer.
                   Decode data free space in session wire buffer. */
                consumed = tls_process_input_data(s, (const uint8_t *)buf->base, nread);
+               if (consumed <= 0) {
+                       return;
+               }
                data = session_wirebuf_get_free_start(s);
                data_len = consumed;
        }
index a869d6db8133fb7976d9e018318cabf4a6c6ff02..74aa038f59caafbc8911165240c7ca7115322ef3 100644 (file)
@@ -496,6 +496,11 @@ ssize_t session_wirebuf_consume(struct session *session, const uint8_t *data, ss
                return kr_error(EINVAL);
        }
 
+       if (len < 0) {
+               /* shouldn't happen */
+               return kr_error(EINVAL);
+       }
+
        if (session->wire_buf_end_idx + len > session->wire_buf_size) {
                /* shouldn't happen */
                return kr_error(EINVAL);