Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add more limits on length on object from the outside world. #4301

Merged
merged 9 commits into from
Aug 1, 2023
Prev Previous commit
Next Next commit
Revert "Add max entry count datastore"
This reverts commit 3b6dd07.
AurelienFT committed Aug 1, 2023
commit ae12f170218ce249090dce7479ba6966410d144e
8 changes: 2 additions & 6 deletions massa-bootstrap/src/tests/scenarios.rs
Original file line number Diff line number Diff line change
@@ -30,9 +30,8 @@ use massa_final_state::{
use massa_ledger_exports::LedgerConfig;
use massa_metrics::MassaMetrics;
use massa_models::config::{
DENUNCIATION_EXPIRE_PERIODS, ENDORSEMENT_COUNT, GENESIS_TIMESTAMP, MAX_DATASTORE_ENTRY_COUNT,
MAX_DEFERRED_CREDITS_LENGTH, MAX_DENUNCIATIONS_PER_BLOCK_HEADER, MAX_PRODUCTION_STATS_LENGTH,
MAX_ROLLS_COUNT_LENGTH, T0,
DENUNCIATION_EXPIRE_PERIODS, ENDORSEMENT_COUNT, GENESIS_TIMESTAMP, MAX_DEFERRED_CREDITS_LENGTH,
MAX_DENUNCIATIONS_PER_BLOCK_HEADER, MAX_PRODUCTION_STATS_LENGTH, MAX_ROLLS_COUNT_LENGTH, T0,
};
use massa_models::{
address::Address, config::MAX_DATASTORE_VALUE_LENGTH, node::NodeId, slot::Slot,
@@ -110,7 +109,6 @@ fn mock_bootstrap_manager(addr: SocketAddr, bootstrap_config: BootstrapConfig) -
disk_ledger_path: temp_dir.path().to_path_buf(),
max_key_length: MAX_DATASTORE_KEY_LENGTH,
max_datastore_value_length: MAX_DATASTORE_VALUE_LENGTH,
max_datastore_entry_count: MAX_DATASTORE_ENTRY_COUNT,
},
async_pool_config: AsyncPoolConfig {
thread_count,
@@ -241,7 +239,6 @@ fn test_bootstrap_server() {
disk_ledger_path: temp_dir_server.path().to_path_buf(),
max_key_length: MAX_DATASTORE_KEY_LENGTH,
max_datastore_value_length: MAX_DATASTORE_VALUE_LENGTH,
max_datastore_entry_count: MAX_DATASTORE_ENTRY_COUNT,
},
async_pool_config: AsyncPoolConfig {
thread_count,
@@ -620,7 +617,6 @@ fn test_bootstrap_accept_err() {
disk_ledger_path: temp_dir_server.path().to_path_buf(),
max_key_length: MAX_DATASTORE_KEY_LENGTH,
max_datastore_value_length: MAX_DATASTORE_VALUE_LENGTH,
max_datastore_entry_count: MAX_DATASTORE_ENTRY_COUNT,
},
async_pool_config: AsyncPoolConfig {
thread_count,
2 changes: 0 additions & 2 deletions massa-execution-exports/src/settings.rs
Original file line number Diff line number Diff line change
@@ -60,8 +60,6 @@ pub struct ExecutionConfig {
pub max_datastore_key_length: u8,
/// Max bytecode size
pub max_bytecode_size: u64,
/// Max datastore entry count
pub max_datastore_entry_count: u64,
/// Max datastore value size
pub max_datastore_value_size: u64,
/// Storage cost constants
1 change: 0 additions & 1 deletion massa-execution-exports/src/test_exports/config.rs
Original file line number Diff line number Diff line change
@@ -68,7 +68,6 @@ impl Default for ExecutionConfig {
max_event_size: 50_000,
max_function_length: 1000,
max_parameter_length: 1000,
max_datastore_entry_count: MAX_DATASTORE_ENTRY_COUNT,
}
}
}
1 change: 0 additions & 1 deletion massa-execution-worker/src/context.rs
Original file line number Diff line number Diff line change
@@ -198,7 +198,6 @@ impl ExecutionContext {
config.max_datastore_key_length,
config.max_bytecode_size,
config.max_datastore_value_size,
config.max_datastore_entry_count,
config.storage_costs_constants,
),
speculative_async_pool: SpeculativeAsyncPool::new(
16 changes: 0 additions & 16 deletions massa-execution-worker/src/speculative_ledger.rs
Original file line number Diff line number Diff line change
@@ -55,9 +55,6 @@ pub(crate) struct SpeculativeLedger {
/// Max bytecode size
max_bytecode_size: u64,

/// Max datastore entry count
max_datastore_entry_count: u64,

/// storage cost constants
storage_costs_constants: StorageCostsConstants,
}
@@ -74,7 +71,6 @@ impl SpeculativeLedger {
max_datastore_key_length: u8,
max_bytecode_size: u64,
max_datastore_value_size: u64,
max_datastore_entry_count: u64,
storage_costs_constants: StorageCostsConstants,
) -> Self {
SpeculativeLedger {
@@ -83,7 +79,6 @@ impl SpeculativeLedger {
active_history,
max_datastore_key_length,
max_datastore_value_size,
max_datastore_entry_count,
max_bytecode_size,
storage_costs_constants,
}
@@ -540,17 +535,6 @@ impl SpeculativeLedger {
)));
}

// check if caller doesn't have already too many data entries
if let Some(keys) = self.get_keys(addr, &[]) {
if keys.len() >= self.max_datastore_entry_count as usize {
return Err(ExecutionError::RuntimeError(format!(
"could not set data for address {}: address has already {} keys",
addr,
keys.len()
)));
}
}

// check key correctness
let key_length = key.len();
if key_length == 0 || key_length > self.max_datastore_key_length as usize {
6 changes: 2 additions & 4 deletions massa-final-state/src/tests/scenarios.rs
Original file line number Diff line number Diff line change
@@ -16,9 +16,8 @@ use massa_models::address::Address;
use massa_models::amount::Amount;
use massa_models::bytecode::Bytecode;
use massa_models::config::{
DENUNCIATION_EXPIRE_PERIODS, ENDORSEMENT_COUNT, GENESIS_TIMESTAMP, MAX_DATASTORE_ENTRY_COUNT,
MAX_DEFERRED_CREDITS_LENGTH, MAX_DENUNCIATIONS_PER_BLOCK_HEADER, MAX_PRODUCTION_STATS_LENGTH,
MAX_ROLLS_COUNT_LENGTH, T0,
DENUNCIATION_EXPIRE_PERIODS, ENDORSEMENT_COUNT, GENESIS_TIMESTAMP, MAX_DEFERRED_CREDITS_LENGTH,
MAX_DENUNCIATIONS_PER_BLOCK_HEADER, MAX_PRODUCTION_STATS_LENGTH, MAX_ROLLS_COUNT_LENGTH, T0,
};
use massa_models::config::{
MAX_ASYNC_MESSAGE_DATA, MAX_ASYNC_POOL_LENGTH, MAX_DATASTORE_KEY_LENGTH, POS_SAVED_CYCLES,
@@ -56,7 +55,6 @@ fn create_final_state(temp_dir: &TempDir, reset_final_state: bool) -> Arc<RwLock
disk_ledger_path: temp_dir.path().to_path_buf(),
max_key_length: MAX_DATASTORE_KEY_LENGTH,
max_datastore_value_length: MAX_DATASTORE_VALUE_LENGTH,
max_datastore_entry_count: MAX_DATASTORE_ENTRY_COUNT,
},
async_pool_config: AsyncPoolConfig {
thread_count,
2 changes: 0 additions & 2 deletions massa-ledger-exports/src/config.rs
Original file line number Diff line number Diff line change
@@ -17,6 +17,4 @@ pub struct LedgerConfig {
pub max_key_length: u8,
/// max datastore value length
pub max_datastore_value_length: u64,
/// max datastore entry count
pub max_datastore_entry_count: u64,
}
7 changes: 1 addition & 6 deletions massa-ledger-exports/src/test_exports/config.rs
Original file line number Diff line number Diff line change
@@ -2,10 +2,7 @@
/// This file defines testing tools related to the configuration
use massa_models::{
address::Address,
config::{
MAX_DATASTORE_ENTRY_COUNT, MAX_DATASTORE_KEY_LENGTH, MAX_DATASTORE_VALUE_LENGTH,
THREAD_COUNT,
},
config::{MAX_DATASTORE_KEY_LENGTH, MAX_DATASTORE_VALUE_LENGTH, THREAD_COUNT},
};
use std::collections::HashMap;
use std::io::Seek;
@@ -24,7 +21,6 @@ impl Default for LedgerConfig {
thread_count: THREAD_COUNT,
max_key_length: MAX_DATASTORE_KEY_LENGTH,
max_datastore_value_length: MAX_DATASTORE_VALUE_LENGTH,
max_datastore_entry_count: MAX_DATASTORE_ENTRY_COUNT,
}
}
}
@@ -47,7 +43,6 @@ impl LedgerConfig {
max_key_length: MAX_DATASTORE_KEY_LENGTH,
thread_count: THREAD_COUNT,
max_datastore_value_length: MAX_DATASTORE_VALUE_LENGTH,
max_datastore_entry_count: MAX_DATASTORE_ENTRY_COUNT,
},
initial_ledger,
disk_ledger,
1 change: 0 additions & 1 deletion massa-ledger-worker/src/ledger.rs
Original file line number Diff line number Diff line change
@@ -37,7 +37,6 @@ impl FinalLedger {
config.thread_count,
config.max_key_length,
config.max_datastore_value_length,
config.max_datastore_entry_count,
);

// generate the final ledger
17 changes: 1 addition & 16 deletions massa-ledger-worker/src/ledger_db.rs
Original file line number Diff line number Diff line change
@@ -62,7 +62,6 @@ pub struct LedgerDB {
bytecode_deserializer: BytecodeDeserializer,
max_datastore_value_length: u64,
max_datastore_key_length: u8,
max_datastore_entry_count: u64,
}

impl Debug for LedgerDB {
@@ -82,7 +81,6 @@ impl LedgerDB {
thread_count: u8,
max_datastore_key_length: u8,
max_datastore_value_length: u64,
max_datastore_entry_count: u64,
) -> Self {
LedgerDB {
db,
@@ -102,7 +100,6 @@ impl LedgerDB {
Bound::Included(u64::MAX),
),
max_datastore_value_length,
max_datastore_entry_count,
max_datastore_key_length,
}
}
@@ -316,18 +313,7 @@ impl LedgerDB {
db.put_or_update_entry_value(batch, serialized_key, &bytes_bytecode);

// datastore
let mut number_of_keys = self
.get_datastore_keys(addr, &[])
.map(|keys| keys.len())
.unwrap_or_else(|| 0);
for (key, entry) in ledger_entry.datastore {
if number_of_keys >= self.max_datastore_entry_count as usize {
warn!(
"Too much datastore entries for address {} ({} > {})",
addr, number_of_keys, self.max_datastore_entry_count
);
continue;
}
if entry.len() > self.max_datastore_value_length as usize {
warn!(
"Datastore entry for address {} and key {:?} is too big ({} > {})",
@@ -356,7 +342,6 @@ impl LedgerDB {
)
.expect(KEY_SER_ERROR);
db.put_or_update_entry_value(batch, serialized_key, &entry);
number_of_keys += 1;
}
}

@@ -614,7 +599,7 @@ mod tests {
Box::new(MassaDB::new(db_config)) as Box<(dyn MassaDBController + 'static)>
));

let ledger_db = LedgerDB::new(db.clone(), 32, 255, 1000, 100000);
let ledger_db = LedgerDB::new(db.clone(), 32, 255, 1000);
let mut batch = DBBatch::new();

ledger_db.put_entry(&addr, entry, &mut batch);
1 change: 0 additions & 1 deletion massa-ledger-worker/src/test_exports/bootstrap.rs
Original file line number Diff line number Diff line change
@@ -20,7 +20,6 @@ pub fn create_final_ledger(
config.thread_count,
config.max_key_length,
config.max_datastore_value_length,
config.max_datastore_entry_count,
);
ledger_db.load_initial_ledger(initial_ledger);
FinalLedger {
5 changes: 1 addition & 4 deletions massa-ledger-worker/src/test_exports/config.rs
Original file line number Diff line number Diff line change
@@ -9,9 +9,7 @@ use parking_lot::RwLock;
use tempfile::TempDir;

use crate::{ledger_db::LedgerDB, FinalLedger};
use massa_models::config::{
MAX_DATASTORE_ENTRY_COUNT, MAX_DATASTORE_KEY_LENGTH, MAX_DATASTORE_VALUE_LENGTH, THREAD_COUNT,
};
use massa_models::config::{MAX_DATASTORE_KEY_LENGTH, MAX_DATASTORE_VALUE_LENGTH, THREAD_COUNT};

/// Default value of `FinalLedger` used for tests
impl Default for FinalLedger {
@@ -29,7 +27,6 @@ impl Default for FinalLedger {
THREAD_COUNT,
MAX_DATASTORE_KEY_LENGTH,
MAX_DATASTORE_VALUE_LENGTH,
MAX_DATASTORE_ENTRY_COUNT,
);
FinalLedger {
config: Default::default(),
2 changes: 0 additions & 2 deletions massa-node/src/main.rs
Original file line number Diff line number Diff line change
@@ -195,7 +195,6 @@ async fn launch(
disk_ledger_path: SETTINGS.ledger.disk_ledger_path.clone(),
max_key_length: MAX_DATASTORE_KEY_LENGTH,
max_datastore_value_length: MAX_DATASTORE_VALUE_LENGTH,
max_datastore_entry_count: MAX_DATASTORE_ENTRY_COUNT,
};
let async_pool_config = AsyncPoolConfig {
max_length: MAX_ASYNC_POOL_LENGTH,
@@ -484,7 +483,6 @@ async fn launch(
max_datastore_key_length: MAX_DATASTORE_KEY_LENGTH,
max_bytecode_size: MAX_BYTECODE_LENGTH,
max_datastore_value_size: MAX_DATASTORE_VALUE_LENGTH,
max_datastore_entry_count: MAX_DATASTORE_ENTRY_COUNT,
storage_costs_constants,
max_read_only_gas: SETTINGS.execution.max_read_only_gas,
initial_vesting_path: SETTINGS.execution.initial_vesting_path.clone(),