From: Nikolay Shirokovskiy Date: Mon, 25 Feb 2019 14:10:01 +0000 (+0300) Subject: tools: console: check if console was shutdown in callbacks X-Git-Tag: v5.3.0-rc1~245 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4525de73569a0f662e12ce9fa3705be45947594e;p=thirdparty%2Flibvirt.git tools: console: check if console was shutdown in callbacks On error in main thread virConsoleShutdown is called which deletes fd watches/stream callback and yet callbacks can be called after. Thus we can incorrectly allocate terminalToStream.data memory and get memory leak for example. Let's check if console was shutdown in the very beginning of callbacks. Reviewed-by: Cole Robinson Signed-off-by: Nikolay Shirokovskiy --- diff --git a/tools/virsh-console.c b/tools/virsh-console.c index 3dae70799e..d109734acf 100644 --- a/tools/virsh-console.c +++ b/tools/virsh-console.c @@ -139,6 +139,10 @@ virConsoleEventOnStream(virStreamPtr st, virObjectLock(con); + /* we got late event after console was shutdown */ + if (!con->st) + goto cleanup; + if (events & VIR_STREAM_EVENT_READABLE) { size_t avail = con->streamToTerminal.length - con->streamToTerminal.offset; @@ -219,6 +223,10 @@ virConsoleEventOnStdin(int watch ATTRIBUTE_UNUSED, virObjectLock(con); + /* we got late event after console was shutdown */ + if (!con->st) + goto cleanup; + if (events & VIR_EVENT_HANDLE_READABLE) { size_t avail = con->terminalToStream.length - con->terminalToStream.offset; @@ -279,6 +287,10 @@ virConsoleEventOnStdout(int watch ATTRIBUTE_UNUSED, virObjectLock(con); + /* we got late event after console was shutdown */ + if (!con->st) + goto cleanup; + if (events & VIR_EVENT_HANDLE_WRITABLE && con->streamToTerminal.offset) { ssize_t done;