qcow: track deallocated clusters as unreferenced

In deallocate_cluster(), we call set_cluster_refcount() to unref the
cluster that is being deallocated, but we never actually added the
deallocated cluster to the unref_clusters list.  Add clusters whose
refcounts reach 0 to the unref_clusters list as well.

Also add mremap() to the seccomp whitelist for the block device, since
this is being triggered by libc realloc() and other devices already
include it in the whitelist.

BUG=chromium:850998
TEST=cargo test -p qcow; test crosvm on nami and verify that qcow file
     size stays bounded when creating a 1 GB file and deleting it
     repeatedly

Change-Id: I1bdd96b2176dc13069417e0ac77f0768f9f26012
Signed-off-by: Daniel Verkamp <dverkamp@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/1259404
Reviewed-by: Dylan Reid <dgreid@chromium.org>
This commit is contained in:
Daniel Verkamp 2018-10-03 10:44:34 -07:00 committed by chrome-bot
parent c8986f14a8
commit b1570f2672
3 changed files with 3 additions and 0 deletions

View file

@ -732,6 +732,7 @@ impl QcowFile {
let _ = fallocate(self.raw_file.file_mut(),
FallocateMode::PunchHole, true,
cluster_addr, cluster_size);
self.unref_clusters.push(cluster_addr);
}
Ok(())
}

View file

@ -18,6 +18,7 @@ _llseek: 1
# negation, thus the manually negated mask constant.
mmap2: arg2 in 0xfffffffb
mprotect: arg2 in 0xfffffffb
mremap: 1
munmap: 1
read: 1
recv: 1

View file

@ -19,6 +19,7 @@ mmap: arg2 in 0xfffffffb
mprotect: arg2 in 0xfffffffb
# Allow MADV_DONTDUMP only.
madvise: arg2 == 0x00000010
mremap: 1
munmap: 1
read: 1
recvfrom: 1