[pbs-devel] [PATCH v4 proxmox-backup 05/11] api: verify fixed index writer size on close

Robert Obkircher r.obkircher at proxmox.com
Fri Jan 23 16:37:18 CET 2026


Compare it to the value submitted by the client to check that the
resizing worked as expected.

Signed-off-by: Robert Obkircher <r.obkircher at proxmox.com>
---
 pbs-datastore/src/fixed_index.rs | 5 +++++
 src/api2/backup/environment.rs   | 8 ++++++++
 2 files changed, 13 insertions(+)

diff --git a/pbs-datastore/src/fixed_index.rs b/pbs-datastore/src/fixed_index.rs
index 4290da08..ecfe9b28 100644
--- a/pbs-datastore/src/fixed_index.rs
+++ b/pbs-datastore/src/fixed_index.rs
@@ -404,6 +404,11 @@ impl FixedIndexWriter {
         self.index_length
     }
 
+    /// The total size of the referenced content. This may be increased with [`grow_to_size`].
+    pub fn size(&self) -> u64 {
+        self.size as u64
+    }
+
     fn unmap(&mut self) -> Result<(), Error> {
         let Some(index) = NonNull::new(self.index as *mut std::ffi::c_void) else {
             return Ok(());
diff --git a/src/api2/backup/environment.rs b/src/api2/backup/environment.rs
index 90a84ed2..dc4f9bf5 100644
--- a/src/api2/backup/environment.rs
+++ b/src/api2/backup/environment.rs
@@ -637,6 +637,14 @@ impl BackupEnvironment {
             }
         }
 
+        let writer_size = data.index.size();
+        if size != writer_size {
+            bail!(
+                "fixed writer '{}' close failed - unexpected size ({size} != {writer_size})",
+                data.name,
+            );
+        }
+
         let expected_csum = data.index.close()?;
         data.closed = true;
 
-- 
2.47.3





More information about the pbs-devel mailing list