Skip to content

Commit 5cf97e9

Browse files
authored
Merge pull request #21 from stupendoussuperpowers/double-free-fix
grate-rs: Add syscall constants, fix memory management
2 parents 793db82 + 97c5bba commit 5cf97e9

File tree

5 files changed

+202
-66
lines changed

5 files changed

+202
-66
lines changed

lib/grate-rs/examples/make_syscall.rs

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33
//! Here, the geteuid calls are redirected to the grate for logging purposes.
44
//!
55
//! The syscall wrapper here uses make_threei_call to call geteuid() as the cage and logs the return value.
6-
use grate_rs::GrateBuilder;
6+
use grate_rs::constants::SYS_GETEUID;
7+
use grate_rs::{GrateBuilder, GrateError};
78

89
extern "C" fn geteuid_syscall(
910
cageid: u64,
@@ -43,17 +44,13 @@ extern "C" fn geteuid_syscall(
4344
}
4445

4546
fn main() {
46-
let builder = GrateBuilder::new().register(107, geteuid_syscall);
47+
let builder = GrateBuilder::new()
48+
.register(SYS_GETEUID, geteuid_syscall)
49+
.teardown(|result: Result<i32, GrateError>| {
50+
println!("Result: {:#?}", result);
51+
});
4752

4853
let argv = std::env::args().skip(1).collect::<Vec<_>>();
4954

50-
match builder.run(argv) {
51-
Ok(status) => {
52-
println!("[grate_teardown] Cage exited with: {status}.");
53-
}
54-
Err(e) => {
55-
eprintln!("[grate_error] Failed to run grate: {:?}", e);
56-
std::process::exit(1);
57-
}
58-
}
55+
builder.run(argv);
5956
}

lib/grate-rs/examples/read_syscall.rs

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
//! - `getcageid()`: obtain the current cage id from inside a handler.
77
//! - `copy_data_between_cages(...)`: copy memory between cages.
88
9-
use grate_rs::{GrateBuilder, copy_data_between_cages, getcageid};
9+
use grate_rs::{GrateBuilder, GrateError, constants::SYS_READ, copy_data_between_cages, getcageid};
1010
use std::cmp::min;
1111

1212
fn imfs_read(_cageid: u64, _fd: u64, buf: &mut [u8], count: usize) -> i32 {
@@ -60,19 +60,13 @@ fn main() {
6060
"[grate_init] Run all required initializations before calling builder.run(), such as imfs_init() or preloads()"
6161
);
6262

63-
let builder = GrateBuilder::new().register(0, read_syscall);
63+
let builder = GrateBuilder::new()
64+
.register(SYS_READ, read_syscall)
65+
.teardown(|result: Result<i32, GrateError>| {
66+
println!("Result: {:#?}", result);
67+
});
6468

6569
let argv = std::env::args().skip(1).collect::<Vec<_>>();
6670

67-
match builder.run(argv) {
68-
Ok(status) => {
69-
println!(
70-
"[grate_teardown] Cage exited with: {status}. Safe to run teardown functions such as dump_file()"
71-
);
72-
}
73-
Err(e) => {
74-
eprintln!("[grate_error] Failed to run grate: {:?}", e);
75-
std::process::exit(1);
76-
}
77-
}
71+
builder.run(argv);
7872
}

lib/grate-rs/src/constants/mod.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
pub mod syscall_numbers;
2+
3+
pub use syscall_numbers::*;
Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
pub const SYS_READ: u64 = 0;
2+
pub const SYS_WRITE: u64 = 1;
3+
pub const SYS_OPEN: u64 = 2;
4+
pub const SYS_CLOSE: u64 = 3;
5+
pub const SYS_XSTAT: u64 = 4;
6+
pub const SYS_FXSTAT: u64 = 5;
7+
pub const SYS_POLL: u64 = 7;
8+
pub const SYS_LSEEK: u64 = 8;
9+
pub const SYS_MMAP: u64 = 9;
10+
pub const SYS_MPROTECT: u64 = 10;
11+
pub const SYS_MUNMAP: u64 = 11;
12+
pub const SYS_BRK: u64 = 12;
13+
pub const SYS_SIGACTION: u64 = 13;
14+
pub const SYS_SIGPROCMASK: u64 = 14;
15+
16+
pub const SYS_IOCTL: u64 = 16;
17+
pub const SYS_PREAD: u64 = 17;
18+
pub const SYS_PWRITE: u64 = 18;
19+
pub const SYS_WRITEV: u64 = 20;
20+
pub const SYS_ACCESS: u64 = 21;
21+
pub const SYS_PIPE: u64 = 22;
22+
pub const SYS_SELECT: u64 = 23;
23+
pub const SYS_SCHED_YIELD: u64 = 24;
24+
25+
pub const SYS_SHMGET: u64 = 29;
26+
pub const SYS_SHMAT: u64 = 30;
27+
pub const SYS_SHMCTL: u64 = 31;
28+
29+
pub const SYS_DUP: u64 = 32;
30+
pub const SYS_DUP2: u64 = 33;
31+
32+
pub const SYS_NANOSLEEP_TIME64: u64 = 35;
33+
pub const SYS_SETITIMER: u64 = 38;
34+
35+
pub const SYS_GETPID: u64 = 39;
36+
37+
pub const SYS_SOCKET: u64 = 41;
38+
pub const SYS_CONNECT: u64 = 42;
39+
pub const SYS_ACCEPT: u64 = 43;
40+
pub const SYS_SENDTO: u64 = 44;
41+
pub const SYS_RECVFROM: u64 = 45;
42+
pub const SYS_SENDMSG: u64 = 46;
43+
pub const SYS_RECVMSG: u64 = 47;
44+
pub const SYS_SHUTDOWN: u64 = 48;
45+
pub const SYS_BIND: u64 = 49;
46+
pub const SYS_LISTEN: u64 = 50;
47+
pub const SYS_GETSOCKNAME: u64 = 51;
48+
pub const SYS_GETPEERNAME: u64 = 52;
49+
pub const SYS_SOCKETPAIR: u64 = 53;
50+
pub const SYS_SETSOCKOPT: u64 = 54;
51+
pub const SYS_GETSOCKOPT: u64 = 55;
52+
53+
pub const SYS_CLONE: u64 = 56;
54+
pub const SYS_FORK: u64 = 57;
55+
pub const SYS_EXEC: u64 = 59;
56+
pub const SYS_EXECVE: u64 = 59;
57+
pub const SYS_EXIT: u64 = 60;
58+
pub const SYS_WAITPID: u64 = 61;
59+
pub const SYS_KILL: u64 = 62;
60+
61+
pub const SYS_SHMDT: u64 = 67;
62+
63+
pub const SYS_FCNTL: u64 = 72;
64+
pub const SYS_FLOCK: u64 = 73;
65+
pub const SYS_FSYNC: u64 = 74;
66+
pub const SYS_FDATASYNC: u64 = 75;
67+
pub const SYS_TRUNCATE: u64 = 76;
68+
pub const SYS_FTRUNCATE: u64 = 77;
69+
pub const SYS_GETDENTS: u64 = 78;
70+
pub const SYS_GETCWD: u64 = 79;
71+
pub const SYS_CHDIR: u64 = 80;
72+
pub const SYS_FCHDIR: u64 = 81;
73+
pub const SYS_RENAME: u64 = 82;
74+
pub const SYS_UNLINK: u64 = 87;
75+
pub const SYS_READLINK: u64 = 89;
76+
77+
pub const SYS_CHMOD: u64 = 90;
78+
pub const SYS_FCHMOD: u64 = 91;
79+
pub const SYS_GETUID: u64 = 102;
80+
pub const SYS_GETGID: u64 = 104;
81+
pub const SYS_GETEUID: u64 = 107;
82+
pub const SYS_GETEGID: u64 = 108;
83+
pub const SYS_GETPPID: u64 = 110;
84+
85+
pub const SYS_STATFS: u64 = 137;
86+
pub const SYS_FSTATFS: u64 = 138;
87+
88+
pub const SYS_GETHOSTNAME: u64 = 170;
89+
pub const SYS_FUTEX: u64 = 202;
90+
pub const SYS_EPOLL_CREATE: u64 = 213;
91+
92+
pub const SYS_CLOCK_GETTIME: u64 = 228;
93+
pub const SYS_EPOLL_WAIT: u64 = 232;
94+
pub const SYS_EPOLL_CTL: u64 = 233;
95+
pub const SYS_UNLINKAT: u64 = 263;
96+
pub const SYS_READLINKAT: u64 = 267;
97+
pub const SYS_SYNC_FILE_RANGE: u64 = 277;
98+
99+
pub const SYS_EPOLL_CREATE1: u64 = 291;
100+
pub const SYS_DUP3: u64 = 292;
101+
pub const SYS_PIPE2: u64 = 293;
102+
103+
pub const SYS_GETRANDOM: u64 = 318;

0 commit comments

Comments
 (0)