From 251e28bc364a3e63064ac44aac82d4e8059b2bf9 Mon Sep 17 00:00:00 2001 From: brooks Date: Thu, 30 Nov 2023 15:54:19 -0500 Subject: [PATCH] pr: sanitize the footer version --- accounts-db/src/tiered_storage/error.rs | 3 +++ accounts-db/src/tiered_storage/footer.rs | 13 ++++++++++--- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/accounts-db/src/tiered_storage/error.rs b/accounts-db/src/tiered_storage/error.rs index a700d36cb2f0a0..9b9d07d977e804 100644 --- a/accounts-db/src/tiered_storage/error.rs +++ b/accounts-db/src/tiered_storage/error.rs @@ -20,6 +20,9 @@ pub enum TieredStorageError { #[error("invalid footer size: {0}, expected: {1}")] InvalidFooterSize(u64, u64), + #[error("invalid footer version: {0}")] + InvalidFooterVersion(u64), + #[error("footer is unsanitary: {0}")] SanitizeFooter(#[from] SanitizeFooterError), } diff --git a/accounts-db/src/tiered_storage/footer.rs b/accounts-db/src/tiered_storage/footer.rs index d729165ba7909e..81fd529aa5c141 100644 --- a/accounts-db/src/tiered_storage/footer.rs +++ b/accounts-db/src/tiered_storage/footer.rs @@ -219,8 +219,12 @@ impl TieredStorageFooter { } let mut footer_version: u64 = 0; - let mut magic_number = TieredStorageMagicNumber::zeroed(); file.read_type(&mut footer_version)?; + if footer_version != FOOTER_FORMAT_VERSION { + return Err(TieredStorageError::InvalidFooterVersion(footer_version)); + } + + let mut magic_number = TieredStorageMagicNumber::zeroed(); file.read_type(&mut magic_number)?; if magic_number != TieredStorageMagicNumber::default() { return Err(TieredStorageError::MagicNumberMismatch( @@ -247,9 +251,12 @@ impl TieredStorageFooter { )); } - let (_footer_version, offset) = get_type::(mmap, offset)?; - let (magic_number, _offset) = get_type::(mmap, offset)?; + let (footer_version, offset) = get_type::(mmap, offset)?; + if *footer_version != FOOTER_FORMAT_VERSION { + return Err(TieredStorageError::InvalidFooterVersion(*footer_version)); + } + let (magic_number, _offset) = get_type::(mmap, offset)?; if *magic_number != TieredStorageMagicNumber::default() { return Err(TieredStorageError::MagicNumberMismatch( TieredStorageMagicNumber::default().0,