Merge branch 'develop' into v2.0
This commit is contained in:
84
windows_kext/driver/Cargo.lock
generated
84
windows_kext/driver/Cargo.lock
generated
@@ -1,6 +1,6 @@
|
||||
# This file is automatically @generated by Cargo.
|
||||
# It is not intended for manual editing.
|
||||
version = 3
|
||||
version = 4
|
||||
|
||||
[[package]]
|
||||
name = "atomic-polyfill"
|
||||
@@ -13,9 +13,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "autocfg"
|
||||
version = "1.1.0"
|
||||
version = "1.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
|
||||
checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26"
|
||||
|
||||
[[package]]
|
||||
name = "bitflags"
|
||||
@@ -31,15 +31,15 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
|
||||
|
||||
[[package]]
|
||||
name = "cfg-if"
|
||||
version = "1.0.0"
|
||||
version = "1.0.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
|
||||
checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268"
|
||||
|
||||
[[package]]
|
||||
name = "critical-section"
|
||||
version = "1.1.2"
|
||||
version = "1.2.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7059fff8937831a9ae6f0fe4d658ffabf58f2ca96aa9dec1c889f936f705f216"
|
||||
checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b"
|
||||
|
||||
[[package]]
|
||||
name = "driver"
|
||||
@@ -78,9 +78,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "lock_api"
|
||||
version = "0.4.11"
|
||||
version = "0.4.13"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45"
|
||||
checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765"
|
||||
dependencies = [
|
||||
"autocfg",
|
||||
"scopeguard",
|
||||
@@ -103,9 +103,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "num"
|
||||
version = "0.4.1"
|
||||
version = "0.4.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b05180d69e3da0e530ba2a1dae5110317e49e3b7f3d41be227dc5f92e49ee7af"
|
||||
checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23"
|
||||
dependencies = [
|
||||
"num-complex",
|
||||
"num-integer",
|
||||
@@ -116,18 +116,18 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "num-complex"
|
||||
version = "0.4.4"
|
||||
version = "0.4.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1ba157ca0885411de85d6ca030ba7e2a83a28636056c7c699b07c8b6f7383214"
|
||||
checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495"
|
||||
dependencies = [
|
||||
"num-traits",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "num-derive"
|
||||
version = "0.4.1"
|
||||
version = "0.4.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "cfb77679af88f8b125209d354a202862602672222e7f2313fdd6dc349bad4712"
|
||||
checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
@@ -136,19 +136,18 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "num-integer"
|
||||
version = "0.1.45"
|
||||
version = "0.1.46"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
|
||||
checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f"
|
||||
dependencies = [
|
||||
"autocfg",
|
||||
"num-traits",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "num-iter"
|
||||
version = "0.1.43"
|
||||
version = "0.1.45"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252"
|
||||
checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf"
|
||||
dependencies = [
|
||||
"autocfg",
|
||||
"num-integer",
|
||||
@@ -157,38 +156,37 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "num-rational"
|
||||
version = "0.4.1"
|
||||
version = "0.4.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0"
|
||||
checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824"
|
||||
dependencies = [
|
||||
"autocfg",
|
||||
"num-integer",
|
||||
"num-traits",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "num-traits"
|
||||
version = "0.2.17"
|
||||
version = "0.2.19"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c"
|
||||
checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
|
||||
dependencies = [
|
||||
"autocfg",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "num_enum"
|
||||
version = "0.7.2"
|
||||
version = "0.7.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "02339744ee7253741199f897151b38e72257d13802d4ee837285cc2990a90845"
|
||||
checksum = "4e613fc340b2220f734a8595782c551f1250e969d87d3be1ae0579e8d4065179"
|
||||
dependencies = [
|
||||
"num_enum_derive",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "num_enum_derive"
|
||||
version = "0.7.2"
|
||||
version = "0.7.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "681030a937600a36906c185595136d26abfebb4aa9c65701cefcaf8578bb982b"
|
||||
checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
@@ -197,9 +195,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro2"
|
||||
version = "1.0.78"
|
||||
version = "1.0.95"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae"
|
||||
checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778"
|
||||
dependencies = [
|
||||
"unicode-ident",
|
||||
]
|
||||
@@ -215,18 +213,18 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "quote"
|
||||
version = "1.0.35"
|
||||
version = "1.0.40"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef"
|
||||
checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rustc_version"
|
||||
version = "0.4.0"
|
||||
version = "0.4.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
|
||||
checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92"
|
||||
dependencies = [
|
||||
"semver",
|
||||
]
|
||||
@@ -239,9 +237,9 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
|
||||
|
||||
[[package]]
|
||||
name = "semver"
|
||||
version = "1.0.21"
|
||||
version = "1.0.26"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b97ed7a9823b74f99c7742f5336af7be5ecd3eeafcb1507d1fa93347b1d589b0"
|
||||
checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0"
|
||||
|
||||
[[package]]
|
||||
name = "smoltcp"
|
||||
@@ -273,9 +271,9 @@ checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
|
||||
|
||||
[[package]]
|
||||
name = "syn"
|
||||
version = "2.0.48"
|
||||
version = "2.0.102"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f"
|
||||
checksum = "f6397daf94fa90f058bd0fd88429dd9e5738999cca8d701813c80723add80462"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
@@ -284,9 +282,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "unicode-ident"
|
||||
version = "1.0.12"
|
||||
version = "1.0.18"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
|
||||
checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512"
|
||||
|
||||
[[package]]
|
||||
name = "wdk"
|
||||
@@ -299,9 +297,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "widestring"
|
||||
version = "1.0.2"
|
||||
version = "1.2.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "653f141f39ec16bba3c5abe400a0c60da7468261cc2cbf36805022876bc721a8"
|
||||
checksum = "dd7cf3379ca1aac9eea11fba24fd7e315d621f8dfe35c8d7d2be8b793726e07d"
|
||||
|
||||
[[package]]
|
||||
name = "windows-sys"
|
||||
|
||||
@@ -296,9 +296,21 @@ impl Device {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn shutdown(&self) {
|
||||
pub fn shutdown(&mut self) {
|
||||
// End blocking operations from the queue. This will end pending read requests.
|
||||
self.event_queue.rundown();
|
||||
|
||||
// Resolve all pending packets. This is important for proper driver unload.
|
||||
let pending_packets = self.packet_cache.pop_all();
|
||||
for el in pending_packets {
|
||||
let key = el.value.0;
|
||||
let packet = el.value.1;
|
||||
// Set any verdict. Driver will unload after that and the filter will not be active.
|
||||
_ = self
|
||||
.connection_cache
|
||||
.update_connection(key, crate::connection::Verdict::PermanentBlock);
|
||||
_ = self.inject_packet(packet, true); // Blocked must be set, so it only handles the ALE layer.
|
||||
}
|
||||
}
|
||||
|
||||
pub fn inject_packet(&mut self, packet: Packet, blocked: bool) -> Result<(), String> {
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
use core::mem;
|
||||
|
||||
use alloc::collections::VecDeque;
|
||||
use protocol::info::Info;
|
||||
use smoltcp::wire::{IpAddress, IpProtocol};
|
||||
@@ -5,8 +7,8 @@ use wdk::rw_spin_lock::RwSpinLock;
|
||||
|
||||
use crate::{connection::Direction, connection_map::Key, device::Packet};
|
||||
|
||||
struct Entry<T> {
|
||||
value: T,
|
||||
pub struct Entry<T> {
|
||||
pub value: T,
|
||||
id: u64,
|
||||
}
|
||||
|
||||
@@ -54,6 +56,14 @@ impl IdCache {
|
||||
let _guard = self.lock.read_lock();
|
||||
return self.values.len();
|
||||
}
|
||||
|
||||
pub fn pop_all(&mut self) -> VecDeque<Entry<(Key, Packet)>> {
|
||||
let mut values = VecDeque::with_capacity(1);
|
||||
let _guard = self.lock.write_lock();
|
||||
mem::swap(&mut self.values, &mut values);
|
||||
|
||||
return values;
|
||||
}
|
||||
}
|
||||
|
||||
fn get_payload(packet: &Packet) -> Option<&[u8]> {
|
||||
|
||||
@@ -10,15 +10,16 @@ pub const LOG_LEVEL: u8 = Severity::Warning as u8;
|
||||
// pub const LOG_LEVEL: u8 = Severity::Trace as u8;
|
||||
|
||||
pub const MAX_LOG_LINE_SIZE: usize = 150;
|
||||
|
||||
static mut LOG_LINES: [AtomicPtr<Info>; 1024] = unsafe { MaybeUninit::zeroed().assume_init() };
|
||||
const SIZE_OF_LOG_LINE_BUFFER: usize = 1024;
|
||||
static mut LOG_LINES: [AtomicPtr<Info>; SIZE_OF_LOG_LINE_BUFFER] =
|
||||
unsafe { MaybeUninit::zeroed().assume_init() };
|
||||
static START_INDEX: AtomicUsize = unsafe { MaybeUninit::zeroed().assume_init() };
|
||||
static END_INDEX: AtomicUsize = unsafe { MaybeUninit::zeroed().assume_init() };
|
||||
|
||||
pub fn add_line(log_line: Info) {
|
||||
let mut index = END_INDEX.fetch_add(1, Ordering::Acquire);
|
||||
unsafe {
|
||||
index %= LOG_LINES.len();
|
||||
index %= SIZE_OF_LOG_LINE_BUFFER;
|
||||
let ptr = &mut LOG_LINES[index];
|
||||
let line = Box::new(log_line);
|
||||
let old = ptr.swap(Box::into_raw(line), Ordering::SeqCst);
|
||||
@@ -38,7 +39,7 @@ pub fn flush() -> Vec<Info> {
|
||||
unsafe {
|
||||
let count = end_index - start_index;
|
||||
for i in start_index..start_index + count {
|
||||
let index = i % LOG_LINES.len();
|
||||
let index = i % SIZE_OF_LOG_LINE_BUFFER;
|
||||
let ptr = LOG_LINES[index].swap(core::ptr::null_mut(), Ordering::SeqCst);
|
||||
if !ptr.is_null() {
|
||||
vec.push(*Box::from_raw(ptr));
|
||||
|
||||
@@ -1 +1 @@
|
||||
[2, 0, 6, 0]
|
||||
[2, 0, 7, 0]
|
||||
|
||||
@@ -86,7 +86,7 @@ impl<'a> CalloutData<'a> {
|
||||
};
|
||||
}
|
||||
|
||||
pub fn get_value_byte_array16(&'a self, index: usize) -> &[u8; 16] {
|
||||
pub fn get_value_byte_array16(&'a self, index: usize) -> &'a [u8; 16] {
|
||||
unsafe {
|
||||
return self.values[index].value.byte_array16.as_ref().unwrap();
|
||||
};
|
||||
|
||||
@@ -87,15 +87,20 @@ impl NetBufferList {
|
||||
// Allocate space in buffer, if buffer is too small.
|
||||
let mut buffer = alloc::vec![0_u8; data_length as usize];
|
||||
|
||||
let ptr = NdisGetDataBuffer(nb, data_length, buffer.as_mut_ptr(), 1, 0);
|
||||
let buffer_ptr = buffer.as_mut_ptr();
|
||||
|
||||
if !ptr.is_null() {
|
||||
// Two options returns a pointer to the raw packet buffer,
|
||||
// or copies the data to the supplied buffer
|
||||
// and returns a pointer to the supplied buffer.
|
||||
let ptr = NdisGetDataBuffer(nb, data_length, buffer_ptr, 1, 0);
|
||||
|
||||
if ptr.is_null() {
|
||||
return Err("failed to copy packet buffer".to_string());
|
||||
}
|
||||
|
||||
// If the pointers differ the data is not in the correct place.
|
||||
if ptr != buffer_ptr {
|
||||
buffer.copy_from_slice(core::slice::from_raw_parts(ptr, data_length as usize));
|
||||
} else {
|
||||
let ptr = NdisGetDataBuffer(nb, data_length, buffer.as_mut_ptr(), 1, 0);
|
||||
if ptr.is_null() {
|
||||
return Err("failed to copy packet buffer".to_string());
|
||||
}
|
||||
}
|
||||
|
||||
let new_nbl = net_allocator.wrap_packet_in_nbl(&buffer)?;
|
||||
|
||||
Reference in New Issue
Block a user