mirror of
https://github.com/cloud-hypervisor/cloud-hypervisor.git
synced 2026-08-05 02:19:16 +00:00
QCOW2 empty L2 entries in an overlay mean that reads fall through to the backing file. Reusing the punch_hole path for WRITE_ZEROES therefore turns a full-cluster zero operation on an unallocated overlay cluster into backing data exposure. Keep discard/punch_hole behavior unchanged, but let WRITE_ZEROES request a logical-zero marker when the image has a backing file. ZERO_FLAG entries now read as zeros in both the legacy QcowFile path and the shared runtime metadata path. Partial writes after such entries seed new clusters from zeros instead of backing data. Treat ZERO_FLAG entries as logical holes for SEEK_HOLE/SEEK_DATA. Empty overlay entries with a backing file still report data because the data exists in the backing file. Avoid cluster-sized userspace zero buffers when materializing zero-flagged clusters by zeroing the allocated host range directly. This keeps recycled clusters safe without making partial writes allocate large zero-filled Vecs. Add regression coverage for legacy QcowFile, QcowSync, direct I/O, QcowAsync/io_uring overlay paths, and a large-cluster partial-write case. Assisted-by: Codex:GPT-5 Signed-off-by: Ian Klemm <hi@ianklemm.de>