Limit deserialization of data coming off the wire (#6751)
* Limit deserialization of data coming off the wire * Feedback and cleanup
This commit is contained in:
@@ -1,8 +1,7 @@
|
||||
#![allow(clippy::implicit_hasher)]
|
||||
use crate::packet::{Packet, Packets};
|
||||
use crate::packet::{limited_deserialize, Packet, Packets};
|
||||
use crate::sigverify::{self, TxOffset};
|
||||
use crate::sigverify_stage::SigVerifier;
|
||||
use bincode::deserialize;
|
||||
use rayon::iter::IndexedParallelIterator;
|
||||
use rayon::iter::IntoParallelIterator;
|
||||
use rayon::iter::IntoParallelRefMutIterator;
|
||||
@@ -57,7 +56,8 @@ impl ShredSigVerifier {
|
||||
let slot_end = slot_start + size_of::<u64>();
|
||||
trace!("slot {} {}", slot_start, slot_end,);
|
||||
if slot_end <= packet.meta.size {
|
||||
let slot: u64 = deserialize(&packet.data[slot_start..slot_end]).ok()?;
|
||||
let slot: u64 =
|
||||
limited_deserialize(&packet.data[slot_start..slot_end]).ok()?;
|
||||
Some(slot)
|
||||
} else {
|
||||
None
|
||||
@@ -120,7 +120,7 @@ fn verify_shred_cpu(packet: &Packet, slot_leaders: &HashMap<u64, [u8; 32]>) -> O
|
||||
if packet.meta.size < slot_end {
|
||||
return Some(0);
|
||||
}
|
||||
let slot: u64 = deserialize(&packet.data[slot_start..slot_end]).ok()?;
|
||||
let slot: u64 = limited_deserialize(&packet.data[slot_start..slot_end]).ok()?;
|
||||
trace!("slot {}", slot);
|
||||
let pubkey = slot_leaders.get(&slot)?;
|
||||
if packet.meta.size < sig_end {
|
||||
@@ -180,7 +180,7 @@ fn slot_key_data_for_gpu<
|
||||
return std::u64::MAX;
|
||||
}
|
||||
let slot: Option<u64> =
|
||||
deserialize(&packet.data[slot_start..slot_end]).ok();
|
||||
limited_deserialize(&packet.data[slot_start..slot_end]).ok();
|
||||
match slot {
|
||||
Some(slot) if slot_keys.get(&slot).is_some() => slot,
|
||||
_ => std::u64::MAX,
|
||||
@@ -379,7 +379,7 @@ fn sign_shred_cpu(
|
||||
"packet is not large enough for a slot"
|
||||
);
|
||||
let slot: u64 =
|
||||
deserialize(&packet.data[slot_start..slot_end]).expect("can't deserialize slot");
|
||||
limited_deserialize(&packet.data[slot_start..slot_end]).expect("can't deserialize slot");
|
||||
trace!("slot {}", slot);
|
||||
let pubkey = slot_leaders_pubkeys
|
||||
.get(&slot)
|
||||
|
Reference in New Issue
Block a user