From b1570f2672ada3f5c4b9592887186413d80e66de Mon Sep 17 00:00:00 2001 From: Daniel Verkamp Date: Wed, 3 Oct 2018 10:44:34 -0700 Subject: [PATCH] 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 Reviewed-on: https://chromium-review.googlesource.com/1259404 Reviewed-by: Dylan Reid --- qcow/src/qcow.rs | 1 + seccomp/arm/block_device.policy | 1 + seccomp/x86_64/block_device.policy | 1 + 3 files changed, 3 insertions(+) diff --git a/qcow/src/qcow.rs b/qcow/src/qcow.rs index c44cc4add8..fd25053c6b 100644 --- a/qcow/src/qcow.rs +++ b/qcow/src/qcow.rs @@ -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(()) } diff --git a/seccomp/arm/block_device.policy b/seccomp/arm/block_device.policy index 2054d3523d..6b1e415c77 100644 --- a/seccomp/arm/block_device.policy +++ b/seccomp/arm/block_device.policy @@ -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 diff --git a/seccomp/x86_64/block_device.policy b/seccomp/x86_64/block_device.policy index 0c7ef63a48..c660b3ba77 100644 --- a/seccomp/x86_64/block_device.policy +++ b/seccomp/x86_64/block_device.policy @@ -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