vnc: fix resource leak when websocket channel error
authorDing Hui <dinghui@sangfor.com.cn>
Thu, 29 Oct 2020 03:22:41 +0000 (11:22 +0800)
committerGerd Hoffmann <kraxel@redhat.com>
Wed, 4 Nov 2020 07:25:17 +0000 (08:25 +0100)
commit2ddafce7f797082ad216657c830afd4546f16e37
tree9e362260922b7c502c686c11199ba4a11bcd74e8
parent3d6e32347a3b57dac7f469a07c5f520e69bd070a
vnc: fix resource leak when websocket channel error

When we connect to vnc by websocket channel, and disconnect
(maybe by some network exception) before handshake,
qemu will left CLOSE_WAIT socket and never close it

After 04d2529da2 ("ui: convert VNC server to use QIOChannelSocket")
and dd154c4d9f ("io: fix handling of EOF / error conditions in websock GSource"),
the vnc call qio_channel_add_watch only care about G_IO_IN,
but mising G_IO_HUP and G_IO_ERR.
When the websocket channel get EOF or error, it cannot callback,
because the caller ignore the event, that leads to resource leak

We need handle G_IO_HUP and G_IO_ERR event, then cleanup the channel

Fixes: 04d2529da2 ("ui: convert VNC server to use QIOChannelSocket")
Fixes: dd154c4d9f ("io: fix handling of EOF / error conditions in websock GSource")
Cc: qemu-stable@nongnu.org
Signed-off-by: Ding Hui <dinghui@sangfor.com.cn>
Message-id: 20201029032241.11040-1-dinghui@sangfor.com.cn
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
ui/vnc-auth-sasl.c
ui/vnc-auth-vencrypt.c
ui/vnc-jobs.c
ui/vnc-ws.c
ui/vnc.c