vnc_worker_thread_loop() copies z_stream stored in its local VncState to the persistent VncState, and the copied one is freed with deflateEnd() later. However, deflateEnd() refuses to operate with a copied z_stream and returns Z_STREAM_ERROR, leaking the allocated memory.
Avoid copying the zlib state to fix the memory leak. Signed-off-by: Akihiko Odaki <od...@rsg.ci.i.u-tokyo.ac.jp> --- Changes in v3: - Rebased. - Reordered the patches. - Removed the extra allocation of VncWorker. - Removed the worker field from VncState. - Dropped the Reviewed-by tags. - Link to v2: https://lore.kernel.org/qemu-devel/20250531-zlib-v2-0-b75c4b476...@rsg.ci.i.u-tokyo.ac.jp Changes in v2: - Rebased. - Link to v1: https://lore.kernel.org/qemu-devel/20250417-zlib-v1-0-34fad73b8...@daynix.com --- Akihiko Odaki (2): ui/vnc: Do not copy z_stream ui/vnc: Introduce the VncWorker type ui/vnc.h | 49 ++++-- ui/vnc-enc-tight.c | 456 ++++++++++++++++++++++++++------------------------ ui/vnc-enc-zlib.c | 47 +++--- ui/vnc-enc-zrle.c | 122 +++++++------- ui/vnc-jobs.c | 13 +- ui/vnc.c | 83 ++++----- ui/vnc-enc-zrle.c.inc | 20 +-- 7 files changed, 407 insertions(+), 383 deletions(-) --- base-commit: 6322b753f798337835e205b6d805356bea582c86 change-id: 20250417-zlib-ce3034f8bc3c Best regards, -- Akihiko Odaki <od...@rsg.ci.i.u-tokyo.ac.jp>