tcp: fix _wbufq_insert bug
authorAndrei Pelinescu-Onciul <andrei@iptel.org>
Mon, 1 Oct 2012 09:55:16 +0000 (11:55 +0200)
committerAndrei Pelinescu-Onciul <andrei@iptel.org>
Mon, 1 Oct 2012 10:33:35 +0000 (12:33 +0200)
When _wbufq_insert was called on a connection that had already
some data added to the write buffer (another process was faster
and added some data before the process that created the connection
had a chance to do it), a wrong size was used in a memmove.
This could lead either to corrupted messages or even crashes (if
 the messages were big enough to cause a buffer overflow).

Many thanks to Jijo for debugging it.

Reported-by: Jijo
tcp_main.c

index e17d06a..2c4bf82 100644 (file)
@@ -808,7 +808,7 @@ inline static int _wbufq_insert(struct  tcp_connection* c, const char* data,
        }
        if ((q->first==q->last) && ((q->last->b_size-q->last_used)>=size)){
                /* one block with enough space in it for size bytes */
-               memmove(q->first->buf+size, q->first->buf, size);
+               memmove(q->first->buf+size, q->first->buf, q->last_used);
                memcpy(q->first->buf, data, size);
                q->last_used+=size;
        }else{