chardev: close QIOChannel before unref'ing
The chardev socket backend will unref the QIOChannel object while it is still potentially open. When using TLS there could be a pending TLS handshake taking place. If the channel is left open then when the TLS handshake callback runs, it can end up accessing free'd memory in the tcp_chr_tls_handshake method. Closing the QIOChannel will unregister any pending handshake source. Reported-by: jiangyegen <jiangyegen@huawei.com> Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com> Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
This commit is contained in:
parent
30c917b0d8
commit
cb8ded0f6d
@ -378,6 +378,10 @@ static void tcp_chr_free_connection(Chardev *chr)
|
|||||||
char_socket_yank_iochannel,
|
char_socket_yank_iochannel,
|
||||||
QIO_CHANNEL(s->sioc));
|
QIO_CHANNEL(s->sioc));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (s->ioc) {
|
||||||
|
qio_channel_close(s->ioc, NULL);
|
||||||
|
}
|
||||||
object_unref(OBJECT(s->sioc));
|
object_unref(OBJECT(s->sioc));
|
||||||
s->sioc = NULL;
|
s->sioc = NULL;
|
||||||
object_unref(OBJECT(s->ioc));
|
object_unref(OBJECT(s->ioc));
|
||||||
|
Loading…
Reference in New Issue
Block a user