public inbox for pbs-devel@lists.proxmox.com
 help / color / mirror / Atom feed
* [PATCH v2 proxmox-backup 0/2] minor chunk insert improvements
@ 2026-08-12 13:58 Robert Obkircher
  2026-08-12 13:58 ` [PATCH v2 proxmox-backup 1/2] datastore: prefer standard library over custom unsafe code Robert Obkircher
  2026-08-12 13:58 ` [PATCH v2 proxmox-backup 2/2] datastore: rephrase error messages for failed chunk insert Robert Obkircher
  0 siblings, 2 replies; 3+ messages in thread
From: Robert Obkircher @ 2026-08-12 13:58 UTC (permalink / raw)
  To: pbs-devel

Improve error messages and avoid custom unsafe code.

Changes since [v1]:
* improve error messages as suggested by @Chris
  * mention "magic number"
  * reprase to "verify and garbage-collect" 

[v1] https://lore.proxmox.com/pbs-devel/20260807095803.3051-1-r.obkircher@proxmox.com/

Robert Obkircher (2):
  datastore: prefer standard library over custom unsafe code
  datastore: rephrase error messages for failed chunk insert

 pbs-datastore/src/chunk_store.rs | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

-- 
2.47.3





^ permalink raw reply	[flat|nested] 3+ messages in thread

* [PATCH v2 proxmox-backup 1/2] datastore: prefer standard library over custom unsafe code
  2026-08-12 13:58 [PATCH v2 proxmox-backup 0/2] minor chunk insert improvements Robert Obkircher
@ 2026-08-12 13:58 ` Robert Obkircher
  2026-08-12 13:58 ` [PATCH v2 proxmox-backup 2/2] datastore: rephrase error messages for failed chunk insert Robert Obkircher
  1 sibling, 0 replies; 3+ messages in thread
From: Robert Obkircher @ 2026-08-12 13:58 UTC (permalink / raw)
  To: pbs-devel

The allocation is unnecessary overhead, and the unsafe code in
read_exact_allocated looks a bit dangerous.

Signed-off-by: Robert Obkircher <r.obkircher@proxmox.com>
---
 pbs-datastore/src/chunk_store.rs | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/pbs-datastore/src/chunk_store.rs b/pbs-datastore/src/chunk_store.rs
index 6d2ffdbde..e5cfd130f 100644
--- a/pbs-datastore/src/chunk_store.rs
+++ b/pbs-datastore/src/chunk_store.rs
@@ -1,3 +1,4 @@
+use std::io::Read;
 use std::os::unix::fs::MetadataExt;
 use std::os::unix::io::AsRawFd;
 use std::path::{Path, PathBuf};
@@ -10,7 +11,6 @@ use tracing::{info, warn};
 
 use pbs_api_types::{DatastoreFSyncLevel, GarbageCollectionStatus};
 use pbs_config::BackupLockGuard;
-use proxmox_io::ReadExt;
 use proxmox_s3_client::S3Client;
 use proxmox_sys::fs::{CreateOptions, create_dir, create_path, file_type_from_file_stat};
 use proxmox_sys::process_locker::{
@@ -708,8 +708,11 @@ impl ChunkStore {
                 }
             } else if chunk.is_encrypted() {
                 // incoming chunk is encrypted, possible attack or hash collision!
-                let mut existing_file = std::fs::File::open(&chunk_path)?;
-                let magic = existing_file.read_exact_allocated(8)?;
+
+                let mut magic = [0u8; 8];
+                std::fs::File::open(&chunk_path)
+                    .and_then(|mut f| f.read_exact(&mut magic))
+                    .map_err(|e| format_err!("Failed to read magic number from header of existing chunk '{digest_str}' on store '{name}: {e}"))?;
 
                 // going from unencrypted to encrypted can never be right, since the digest
                 // includes data derived from the encryption key
-- 
2.47.3





^ permalink raw reply related	[flat|nested] 3+ messages in thread

* [PATCH v2 proxmox-backup 2/2] datastore: rephrase error messages for failed chunk insert
  2026-08-12 13:58 [PATCH v2 proxmox-backup 0/2] minor chunk insert improvements Robert Obkircher
  2026-08-12 13:58 ` [PATCH v2 proxmox-backup 1/2] datastore: prefer standard library over custom unsafe code Robert Obkircher
@ 2026-08-12 13:58 ` Robert Obkircher
  1 sibling, 0 replies; 3+ messages in thread
From: Robert Obkircher @ 2026-08-12 13:58 UTC (permalink / raw)
  To: pbs-devel

The "not allowed" phrasing sounds like an access-right problem, when
the actual problem is likely file corruption.

Link: https://forum.proxmox.com/threads/184140
Signed-off-by: Robert Obkircher <r.obkircher@proxmox.com>
---
 pbs-datastore/src/chunk_store.rs | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/pbs-datastore/src/chunk_store.rs b/pbs-datastore/src/chunk_store.rs
index e5cfd130f..a3cc47d54 100644
--- a/pbs-datastore/src/chunk_store.rs
+++ b/pbs-datastore/src/chunk_store.rs
@@ -718,15 +718,16 @@ impl ChunkStore {
                 // includes data derived from the encryption key
                 if magic == UNCOMPRESSED_BLOB_MAGIC_1_0 || magic == COMPRESSED_BLOB_MAGIC_1_0 {
                     bail!(
-                        "Overwriting unencrypted chunk '{digest_str}' on store '{name}' with encrypted chunk with same digest not allowed!"
+                        "Cannot overwrite existing unencrypted chunk '{digest_str}' on store '{name}' with encrypted chunk."
                     );
                 }
 
                 // if both chunks are uncompressed and encrypted and have the same digest, but
                 // their sizes are different, one of them *must* be invalid
                 if magic == ENCRYPTED_BLOB_MAGIC_1_0 && !chunk.is_compressed() {
+                    // gc is also mentioned because verification doesn't check unreferenced chunks
                     bail!(
-                        "Overwriting existing (encrypted) chunk '{digest_str}' on store '{name}' is not allowed!"
+                        "Found existing encrypted chunk '{digest_str}' of different size on store '{name}'. Verify and garbage-collect the full datastore to clean up possibly corrupted chunks.",
                     )
                 }
 
-- 
2.47.3





^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2026-08-12 13:58 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-12 13:58 [PATCH v2 proxmox-backup 0/2] minor chunk insert improvements Robert Obkircher
2026-08-12 13:58 ` [PATCH v2 proxmox-backup 1/2] datastore: prefer standard library over custom unsafe code Robert Obkircher
2026-08-12 13:58 ` [PATCH v2 proxmox-backup 2/2] datastore: rephrase error messages for failed chunk insert Robert Obkircher

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal