remote: handle partial data transmission

A new bug was introduced as a part of use-after-free fix below:

    commit 411cbe7199ce533ae5fa78f5558dddca6f88ef1a
    Author: Oleg Vasilev <oleg.vasilev@virtuozzo.com>
    Date:   Tue Jul 4 13:10:22 2023 +0600

        remote: fix stream use-after-free

When the message was processed partially, it is actually supposed to
stay in the queue to be processed again. In such case, reinsert it back.

Signed-off-by: Oleg Vasilev <oleg.vasilev@virtuozzo.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
This commit is contained in:
Oleg Vasilev 2023-07-26 13:47:15 +06:00 committed by Michal Privoznik
parent 0cec8abdba
commit ea4c67f567

View File

@ -775,8 +775,12 @@ daemonStreamHandleWrite(virNetServerClient *client,
ret = -1;
}
if (ret > 0)
break; /* still processing data from msg */
if (ret > 0) {
/* still processing data from msg, put it back into queue */
msg->next = stream->rx;
stream->rx = msg;
break;
}
if (ret < 0) {
virNetMessageFree(msg);