@@ -35,6 +35,7 @@ extern crate cranelift_native;
35
35
36
36
use crate :: lib:: * ;
37
37
use byteorder:: { ByteOrder , LittleEndian } ;
38
+ use core:: ops:: Range ;
38
39
use stack:: { StackUsage , StackVerifier } ;
39
40
40
41
mod asm_parser;
@@ -180,7 +181,7 @@ pub struct EbpfVmMbuff<'a> {
180
181
#[ cfg( feature = "cranelift" ) ]
181
182
cranelift_prog : Option < cranelift:: CraneliftProgram > ,
182
183
helpers : HashMap < u32 , ebpf:: Helper > ,
183
- allowed_memory : HashSet < u64 > ,
184
+ allowed_memory : HashSet < Range < u64 > > ,
184
185
stack_usage : Option < StackUsage > ,
185
186
stack_verifier : StackVerifier ,
186
187
}
@@ -400,7 +401,6 @@ impl<'a> EbpfVmMbuff<'a> {
400
401
/// # Examples
401
402
///
402
403
/// ```
403
- /// use std::iter::FromIterator;
404
404
/// use std::ptr::addr_of;
405
405
///
406
406
/// struct MapValue {
@@ -416,13 +416,10 @@ impl<'a> EbpfVmMbuff<'a> {
416
416
/// // Instantiate a VM.
417
417
/// let mut vm = rbpf::EbpfVmMbuff::new(Some(prog)).unwrap();
418
418
/// let start = addr_of!(VALUE) as u64;
419
- /// let addrs = Vec::from_iter(start..start+size_of::<MapValue>() as u64);
420
- /// vm.register_allowed_memory(&addrs);
419
+ /// vm.register_allowed_memory(start..start+size_of::<MapValue>() as u64);
421
420
/// ```
422
- pub fn register_allowed_memory ( & mut self , addrs : & [ u64 ] ) {
423
- for i in addrs {
424
- self . allowed_memory . insert ( * i) ;
425
- }
421
+ pub fn register_allowed_memory ( & mut self , addrs_range : Range < u64 > ) {
422
+ self . allowed_memory . insert ( addrs_range) ;
426
423
}
427
424
428
425
/// Execute the program loaded, with the given packet data and metadata buffer.
@@ -1025,7 +1022,6 @@ impl<'a> EbpfVmFixedMbuff<'a> {
1025
1022
/// # Examples
1026
1023
///
1027
1024
/// ```
1028
- /// use std::iter::FromIterator;
1029
1025
/// use std::ptr::addr_of;
1030
1026
///
1031
1027
/// struct MapValue {
@@ -1041,11 +1037,10 @@ impl<'a> EbpfVmFixedMbuff<'a> {
1041
1037
/// // Instantiate a VM.
1042
1038
/// let mut vm = rbpf::EbpfVmFixedMbuff::new(Some(prog), 0x40, 0x50).unwrap();
1043
1039
/// let start = addr_of!(VALUE) as u64;
1044
- /// let addrs = Vec::from_iter(start..start+size_of::<MapValue>() as u64);
1045
- /// vm.register_allowed_memory(&addrs);
1040
+ /// vm.register_allowed_memory(start..start+size_of::<MapValue>() as u64);
1046
1041
/// ```
1047
- pub fn register_allowed_memory ( & mut self , allowed : & [ u64 ] ) {
1048
- self . parent . register_allowed_memory ( allowed )
1042
+ pub fn register_allowed_memory ( & mut self , addrs_range : Range < u64 > ) {
1043
+ self . parent . register_allowed_memory ( addrs_range )
1049
1044
}
1050
1045
1051
1046
/// Execute the program loaded, with the given packet data.
@@ -1568,7 +1563,6 @@ impl<'a> EbpfVmRaw<'a> {
1568
1563
/// # Examples
1569
1564
///
1570
1565
/// ```
1571
- /// use std::iter::FromIterator;
1572
1566
/// use std::ptr::addr_of;
1573
1567
///
1574
1568
/// struct MapValue {
@@ -1584,11 +1578,10 @@ impl<'a> EbpfVmRaw<'a> {
1584
1578
/// // Instantiate a VM.
1585
1579
/// let mut vm = rbpf::EbpfVmRaw::new(Some(prog)).unwrap();
1586
1580
/// let start = addr_of!(VALUE) as u64;
1587
- /// let addrs = Vec::from_iter(start..start+size_of::<MapValue>() as u64);
1588
- /// vm.register_allowed_memory(&addrs);
1581
+ /// vm.register_allowed_memory(start..start+size_of::<MapValue>() as u64);
1589
1582
/// ```
1590
- pub fn register_allowed_memory ( & mut self , allowed : & [ u64 ] ) {
1591
- self . parent . register_allowed_memory ( allowed )
1583
+ pub fn register_allowed_memory ( & mut self , addrs_range : Range < u64 > ) {
1584
+ self . parent . register_allowed_memory ( addrs_range )
1592
1585
}
1593
1586
1594
1587
/// Execute the program loaded, with the given packet data.
@@ -2019,7 +2012,6 @@ impl<'a> EbpfVmNoData<'a> {
2019
2012
/// # Examples
2020
2013
///
2021
2014
/// ```
2022
- /// use std::iter::FromIterator;
2023
2015
/// use std::ptr::addr_of;
2024
2016
///
2025
2017
/// struct MapValue {
@@ -2035,11 +2027,10 @@ impl<'a> EbpfVmNoData<'a> {
2035
2027
/// // Instantiate a VM.
2036
2028
/// let mut vm = rbpf::EbpfVmNoData::new(Some(prog)).unwrap();
2037
2029
/// let start = addr_of!(VALUE) as u64;
2038
- /// let addrs = Vec::from_iter(start..start+size_of::<MapValue>() as u64);
2039
- /// vm.register_allowed_memory(&addrs);
2030
+ /// vm.register_allowed_memory(start..start+size_of::<MapValue>() as u64);
2040
2031
/// ```
2041
- pub fn register_allowed_memory ( & mut self , allowed : & [ u64 ] ) {
2042
- self . parent . register_allowed_memory ( allowed )
2032
+ pub fn register_allowed_memory ( & mut self , addrs_range : Range < u64 > ) {
2033
+ self . parent . register_allowed_memory ( addrs_range )
2043
2034
}
2044
2035
2045
2036
/// JIT-compile the loaded program. No argument required for this.
0 commit comments