Skip to content

Commit e432b63

Browse files
authored
Merge pull request #235 from Freax13/fix/misc
miscellaneous fixes
2 parents 1f90bdf + efa6c3c commit e432b63

28 files changed

Lines changed: 2758 additions & 535 deletions

tee/kernel/src/error.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,11 +109,13 @@ pub enum ErrorKind {
109109
AddrInUse = 98,
110110
AddrNotAvail = 99,
111111
NetUnreach = 101,
112+
ConnAborted = 103,
112113
ConnReset = 104,
113114
IsConn = 106,
114115
NotConn = 107,
115116
TimedOut = 110,
116117
ConnRefused = 111,
118+
Already = 114,
117119
InProgress = 115,
118120
RestartNoIntr = 512,
119121
RestartRestartblock = 516,

tee/kernel/src/fs/fd.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -896,7 +896,7 @@ pub trait OpenFileDescription: Send + Sync + 'static {
896896
&self,
897897
vm: &VirtualMemory,
898898
abi: Abi,
899-
msg_hdr: &mut MsgHdr,
899+
msg_hdr: MsgHdr,
900900
flags: SendMsgFlags,
901901
fdtable: &FileDescriptorTable,
902902
ctx: &FileAccessContext,

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -521,6 +521,12 @@ impl EventCounter {
521521
}
522522
}
523523

524+
impl Default for EventCounter {
525+
fn default() -> Self {
526+
Self::new()
527+
}
528+
}
529+
524530
pub struct AtomicEventCounter(AtomicU64);
525531

526532
impl AtomicEventCounter {

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

Lines changed: 40 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use async_trait::async_trait;
55
use x86_64::structures::paging::{PageSize, Size4KiB};
66

77
use crate::{
8-
error::Result,
8+
error::{Result, ensure, err},
99
fs::{
1010
FileSystem,
1111
fd::{
@@ -20,7 +20,8 @@ use crate::{
2020
user::{
2121
futex::Futexes,
2222
syscall::args::{
23-
FileMode, FileType, FileTypeAndMode, MemfdCreateFlags, OpenFlags, Seals, Stat, Timespec,
23+
FileMode, FileType, FileTypeAndMode, MemfdCreateFlags, OpenFlags, Seals, Stat,
24+
Timespec, Whence,
2425
},
2526
thread::{Gid, Uid},
2627
},
@@ -153,6 +154,43 @@ impl OpenFileDescription for MemFd {
153154
guard.buffer.truncate(length)
154155
}
155156

157+
fn seek(&self, offset: usize, whence: Whence, _: &mut FileAccessContext) -> Result<usize> {
158+
let mut guard = self.internal.lock();
159+
160+
match whence {
161+
Whence::Set => guard.cursor_idx = offset,
162+
Whence::Cur => {
163+
guard.cursor_idx = guard
164+
.cursor_idx
165+
.checked_add_signed(offset as isize)
166+
.ok_or(err!(Inval))?
167+
}
168+
Whence::End => {
169+
let size = guard.buffer.len();
170+
guard.cursor_idx = size
171+
.checked_add_signed(offset as isize)
172+
.ok_or(err!(Inval))?
173+
}
174+
Whence::Data => {
175+
// Ensure that `offset` doesn't point past the file.
176+
ensure!(offset < guard.buffer.len(), NxIo);
177+
178+
// We don't support holes so we always jump to `offset`.
179+
guard.cursor_idx = offset;
180+
}
181+
Whence::Hole => {
182+
let size = guard.buffer.len();
183+
184+
// Ensure that `offset` doesn't point past the file.
185+
ensure!(offset < size, NxIo);
186+
187+
// We don't support holes so we always jump to the end of the file.
188+
guard.cursor_idx = size;
189+
}
190+
}
191+
Ok(guard.cursor_idx)
192+
}
193+
156194
fn get_page(&self, page_idx: usize, shared: bool) -> Result<KernelPage> {
157195
let mut guard = self.internal.lock();
158196
guard.buffer.get_page(page_idx, shared)

tee/kernel/src/fs/fd/unix_socket/dgram.rs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -469,7 +469,12 @@ impl OpenFileDescription for DgramUnixSocket {
469469
}
470470
drop(cmsg_builder);
471471

472-
Ok(written)
472+
let len = if flags.contains(RecvMsgFlags::TRUNC) {
473+
len
474+
} else {
475+
written
476+
};
477+
Ok(len)
473478
}
474479

475480
fn write(&self, buf: &dyn WriteBuf, ctx: &FileAccessContext) -> Result<usize> {
@@ -507,7 +512,7 @@ impl OpenFileDescription for DgramUnixSocket {
507512
&self,
508513
vm: &VirtualMemory,
509514
abi: Abi,
510-
msg_hdr: &mut MsgHdr,
515+
mut msg_hdr: MsgHdr,
511516
flags: SendMsgFlags,
512517
fdtable: &FileDescriptorTable,
513518
ctx: &FileAccessContext,

0 commit comments

Comments
 (0)