rpc: free saved close error in virNetClientDispose

virNetClientMarkClose() may cache the current error in client->error via
virSaveLastError() when a client is marked for close.

That error is normally released in virNetClientCloseLocked(), but some
teardown paths can dispose the client object without reaching that
cleanup. In that case, client->error remains allocated and ASan reports
a leak.

Free client->error in virNetClientDispose() as a final cleanup fallback.

This was observed during virtchd shutdown in test_disk_is_locked, with
the leak originating from:
virDomainInterfaceDeleteDevice() -> remoteConnectClose() ->
virNetClientMarkClose() -> virSaveLastError()

On-behalf-of: SAP leander.kohler@sap.com
Signed-off-by: Leander Kohler <leander.kohler@cyberus-technology.de>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
This commit is contained in:
Leander Kohler authored and Michal Privoznik committed 2026-03-12 13:31:23 +01:00
1 parent e25b82c5f8
commit 88b5e33b4e
1 file changed
+2
+2
View File
@@ -757,6 +757,8 @@ void virNetClientDispose(void *obj)
virObjectUnref(client->sasl);
#endif
g_clear_pointer(&client->error, virFreeError);
virNetMessageClear(&client->msg);
}