Skip to content

Commit 51d078f

Browse files
authored
Merge pull request #233 from Freax13/enhancement/unix-dgram-bind
improve dgram sockets
2 parents 9ebe7bc + 8eb5e2d commit 51d078f

16 files changed

Lines changed: 775 additions & 181 deletions

File tree

tee/Makefile

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
default:
22

33
clippy:
4-
cargo clippy --workspace --exclude example --exclude external-tests-wrapper --exclude test-runner-init --exclude vdso -- -D warnings
4+
cargo clippy --workspace --exclude example --exclude external-tests-wrapper --exclude kernel --exclude test-runner-init --exclude vdso -- -D warnings
5+
cargo clippy -p kernel -- -D warnings
56
cargo clippy -p example -p external-tests-wrapper -p test-runner-init -p tests --tests -- -D warnings
67
$(MAKE) -C vdso clippy
78

tee/kernel/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ arrayvec = { version = "0.7.4", default-features = false }
1919
async-trait = "0.1.77"
2020
bit_field = "0.10.2"
2121
bitflags = { version = "2.4.2", features = ["bytemuck"] }
22-
bytemuck = { version = "1.15.0", features = ["derive", "min_const_generics"] }
22+
bytemuck = { version = "1.15.0", features = ["extern_crate_alloc", "latest_stable_rust"] }
2323
constants = { workspace = true, features = ["nightly"] }
2424
crossbeam-utils = { version = "0.8.19", default-features = false }
2525
either = { version = "1.15.0", default-features = false }

tee/kernel/src/char_dev/char.rs

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ use crate::{
3030
epoll::{EpollReady, EpollRequest, EpollResult, EventCounter, WeakEpollReady},
3131
inotify::Watchers,
3232
stream_buffer,
33-
unix_socket::StreamUnixSocket,
33+
unix_socket::{DgramUnixSocket, StreamUnixSocket},
3434
},
3535
node::{
3636
DirEntry, DirEntryName, DynINode, FileAccessContext, INode, Link, LinkLocation,
@@ -982,7 +982,7 @@ impl Directory for DevPtsDirectory {
982982
bail!(NoEnt)
983983
}
984984

985-
fn bind_socket(
985+
fn bind_stream_socket(
986986
&self,
987987
_file_name: FileName<'static>,
988988
_mode: FileMode,
@@ -994,6 +994,18 @@ impl Directory for DevPtsDirectory {
994994
bail!(NoEnt)
995995
}
996996

997+
fn bind_dgram_socket(
998+
&self,
999+
_file_name: FileName<'static>,
1000+
_mode: FileMode,
1001+
_uid: Uid,
1002+
_gid: Gid,
1003+
_: &DgramUnixSocket,
1004+
_socketname: &Path,
1005+
) -> Result<()> {
1006+
bail!(NoEnt)
1007+
}
1008+
9971009
fn is_empty(&self) -> bool {
9981010
false
9991011
}

tee/kernel/src/fs/fd/buf.rs

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
1-
use alloc::vec::Vec;
1+
use alloc::{sync::Arc, vec::Vec};
22
use core::{cmp, ptr::NonNull};
33

4+
use bytemuck::zeroed_arc_slice;
45
use usize_conversions::{FromUsize, IntoUsize, usize_from};
56
use x86_64::VirtAddr;
67

78
use crate::{
8-
error::Result,
9+
error::{Result, ensure},
910
memory::page::KernelPage,
1011
user::{
1112
memory::VirtualMemory,
@@ -28,6 +29,19 @@ pub trait WriteBuf {
2829
fn buffer_len(&self) -> usize;
2930
fn read(&self, offset: usize, bytes: &mut [u8]) -> Result<()>;
3031
unsafe fn read_volatile(&self, offset: usize, bytes: NonNull<[u8]>) -> Result<()>;
32+
33+
fn read_into_arc(&self, max_size: usize) -> Result<Arc<[u8]>> {
34+
let len = self.buffer_len();
35+
ensure!(len <= max_size, MsgSize);
36+
// We need to zero-initialize the data because we can't (safely) assume
37+
// that `Self::read_volatile` will actually populate all the bytes.
38+
let mut arc = zeroed_arc_slice(len);
39+
40+
let data = Arc::get_mut(&mut arc).unwrap();
41+
self.read(0, data)?;
42+
43+
Ok(arc)
44+
}
3145
}
3246

3347
pub struct KernelReadBuf<'a>(&'a mut [u8]);

0 commit comments

Comments
 (0)