diff --git a/basic_timing_cache_channel/src/lib.rs b/basic_timing_cache_channel/src/lib.rs index acc0a98..d036c77 100644 --- a/basic_timing_cache_channel/src/lib.rs +++ b/basic_timing_cache_channel/src/lib.rs @@ -41,6 +41,7 @@ pub trait TimingChannelPrimitives: Debug + Send + Sync + Default { const NEED_RESET: bool; } +#[derive(Debug)] pub struct TopologyAwareTimingChannelHandle { threshold: Threshold, vpn: VPN, @@ -204,7 +205,7 @@ impl TopologyAwareTimingChannel { Ok(asvp_best_av_errors) } - fn new_with_core_pairs( + pub fn new_with_core_pairs( core_pairs: impl Iterator + Clone, ) -> Result<(Self, usize, usize), TopologyAwareError> { let m = MMappedMemory::new(PAGE_LEN, false); diff --git a/basic_timing_cache_channel/src/naive.rs b/basic_timing_cache_channel/src/naive.rs index f2c8db5..7e87864 100644 --- a/basic_timing_cache_channel/src/naive.rs +++ b/basic_timing_cache_channel/src/naive.rs @@ -1,7 +1,7 @@ use crate::TimingChannelPrimitives; use cache_side_channel::{ - CacheStatus, ChannelFatalError, ChannelHandle, CoreSpec, SideChannelError, - SingleAddrCacheSideChannel, + CacheStatus, ChannelFatalError, ChannelHandle, CoreSpec, MultipleAddrCacheSideChannel, + SideChannelError, SingleAddrCacheSideChannel, }; use cache_utils::calibration::{get_vpn, only_flush, only_reload, HashMap, Threshold, VPN}; use cache_utils::flush; @@ -58,16 +58,17 @@ impl NaiveTimingChannel { &mut self, handle: NaiveTimingChannelHandle, ) -> Result<*const u8, ChannelFatalError> { - if let Some(addr) = self.current.remove(&handle.vpn) { - Ok(addr) - } else { - Err(ChannelFatalError::Oops) - } + //if let Some(addr) = self.current.remove(&handle.vpn) { + Ok(addr) + //} else { + // Err(ChannelFatalError::Oops) + //} } unsafe fn test_impl( &self, handle: &mut NaiveTimingChannelHandle, + //limit: u32, reset: bool, ) -> Result { // This should be handled in prepare / unprepare @@ -87,12 +88,12 @@ impl NaiveTimingChannel { addr: *const u8, ) -> Result { let vpn = get_vpn(addr); - if self.current.get(&vpn).is_some() { + /*if self.current.get(&vpn).is_some() { return Err(ChannelFatalError::Oops); } else { - self.current.insert(vpn, addr); - Ok(NaiveTimingChannelHandle { vpn, addr }) - } + self.current.insert(vpn, addr);*/ + Ok(NaiveTimingChannelHandle { vpn, addr }) + //} } } @@ -139,6 +140,7 @@ impl CovertChannel for NaiveTimingChan unsafe { self.calibrate_impl(page) }.map_err(|_| ()) } } + impl SingleAddrCacheSideChannel for NaiveTimingChannel { type Handle = NaiveTimingChannelHandle; @@ -178,7 +180,52 @@ impl SingleAddrCacheSideChannel for NaiveTimingChann Ok(result) } } +/* +impl MultipleAddrCacheSideChannel for NaiveTimingChannel { + type Handle = NaiveTimingChannelHandle; + const MAX_ADDR: u32 = 0; + unsafe fn test<'a>( + &mut self, + addresses: &mut Vec<&'a mut Self::Handle>, + reset: bool, + ) -> Result, SideChannelError> + where + Self::Handle: 'a, + { + unsafe { self.test_impl(addresses, Self::MAX_ADDR, reset) } + } + + unsafe fn prepare<'a>( + &mut self, + addresses: &mut Vec<&'a mut Self::Handle>, + ) -> Result<(), SideChannelError> + where + Self::Handle: 'a, + { + unsafe { self.prepare_impl(addresses, Self::MAX_ADDR) } + } + fn victim(&mut self, operation: &dyn Fn()) { + operation() + } + + unsafe fn calibrate( + &mut self, + addresses: impl IntoIterator + Clone, + ) -> Result, ChannelFatalError> { + let mut result = vec![]; + for addr in addresses { + match unsafe { self.calibrate_impl(addr) } { + Ok(handle) => result.push(handle), + Err(e) => { + return Err(e); + } + } + } + Ok(result) + } +} +*/ // Include a helper code to get global threshold model ? // TODO diff --git a/flush_reload/src/naive.rs b/flush_reload/src/naive.rs index 8db1ce5..a867efb 100644 --- a/flush_reload/src/naive.rs +++ b/flush_reload/src/naive.rs @@ -1,4 +1,7 @@ use crate::FRPrimitives; use basic_timing_cache_channel::naive::NaiveTimingChannel; +use cache_side_channel::SingleAddrCacheSideChannel; pub type NaiveFlushAndReload = NaiveTimingChannel; + +pub type NFRHandle = ::Handle;