-
Notifications
You must be signed in to change notification settings - Fork 167
Expand file tree
/
Copy pathhost_print.rs
More file actions
38 lines (31 loc) · 1.25 KB
/
host_print.rs
File metadata and controls
38 lines (31 loc) · 1.25 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#![no_main]
use std::sync::{Mutex, OnceLock};
use hyperlight_host::sandbox::uninitialized::GuestBinary;
use hyperlight_host::{Sandbox, UninitializedSandbox};
use hyperlight_testing::simple_guest_for_fuzzing_as_string;
use libfuzzer_sys::{Corpus, fuzz_target};
static SANDBOX: OnceLock<Mutex<Sandbox>> = OnceLock::new();
// This fuzz target is used to test the HostPrint host function. We generate
// an arbitrary ParameterValue::String, which is passed to the guest, which passes
// it without modification to the host function.
// For fuzzing efficiency, we create one Sandbox and reuse it for all fuzzing iterations.
fuzz_target!(
init: {
let u_sbox = UninitializedSandbox::new(
GuestBinary::FilePath(simple_guest_for_fuzzing_as_string().expect("Guest Binary Missing")),
None,
)
.unwrap();
let mu_sbox: Sandbox = u_sbox.init().unwrap();
SANDBOX.set(Mutex::new(mu_sbox)).unwrap();
},
|data: String| -> Corpus {
let mut sandbox = SANDBOX.get().unwrap().lock().unwrap();
let len: i32 = sandbox.call_guest_function_by_name::<i32>(
"PrintOutput",
data,
)
.expect("Unexpected return value");
assert!(len >= 0);
Corpus::Keep
});