xref: /aosp_15_r20/external/crosvm/fuzz/fuzz_targets/zimage_fuzzer.rs (revision bb4ee6a4ae7042d18b07a98463b9c8b875e44b39)
1*bb4ee6a4SAndroid Build Coastguard Worker // Copyright 2019 The ChromiumOS Authors
2*bb4ee6a4SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*bb4ee6a4SAndroid Build Coastguard Worker // found in the LICENSE file.
4*bb4ee6a4SAndroid Build Coastguard Worker 
5*bb4ee6a4SAndroid Build Coastguard Worker #![cfg(not(test))]
6*bb4ee6a4SAndroid Build Coastguard Worker #![no_main]
7*bb4ee6a4SAndroid Build Coastguard Worker 
8*bb4ee6a4SAndroid Build Coastguard Worker use std::fs::File;
9*bb4ee6a4SAndroid Build Coastguard Worker use std::io::Write;
10*bb4ee6a4SAndroid Build Coastguard Worker 
11*bb4ee6a4SAndroid Build Coastguard Worker use crosvm_fuzz::fuzz_target;
12*bb4ee6a4SAndroid Build Coastguard Worker use vm_memory::GuestAddress;
13*bb4ee6a4SAndroid Build Coastguard Worker use vm_memory::GuestMemory;
14*bb4ee6a4SAndroid Build Coastguard Worker 
15*bb4ee6a4SAndroid Build Coastguard Worker const MEM_SIZE: u64 = 256 * 1024 * 1024;
16*bb4ee6a4SAndroid Build Coastguard Worker 
make_elf_bin(elf_bytes: &[u8]) -> File17*bb4ee6a4SAndroid Build Coastguard Worker fn make_elf_bin(elf_bytes: &[u8]) -> File {
18*bb4ee6a4SAndroid Build Coastguard Worker     let mut elf_bin = tempfile::tempfile().expect("failed to create tempfile");
19*bb4ee6a4SAndroid Build Coastguard Worker     elf_bin
20*bb4ee6a4SAndroid Build Coastguard Worker         .write_all(elf_bytes)
21*bb4ee6a4SAndroid Build Coastguard Worker         .expect("failed to write elf to tempfile");
22*bb4ee6a4SAndroid Build Coastguard Worker     elf_bin
23*bb4ee6a4SAndroid Build Coastguard Worker }
24*bb4ee6a4SAndroid Build Coastguard Worker 
25*bb4ee6a4SAndroid Build Coastguard Worker fuzz_target!(|bytes| {
26*bb4ee6a4SAndroid Build Coastguard Worker     let mut kimage = make_elf_bin(bytes);
27*bb4ee6a4SAndroid Build Coastguard Worker     let mem = GuestMemory::new(&[(GuestAddress(0), MEM_SIZE)]).unwrap();
28*bb4ee6a4SAndroid Build Coastguard Worker     let _ = kernel_loader::load_elf32(&mem, GuestAddress(0), &mut kimage, 0);
29*bb4ee6a4SAndroid Build Coastguard Worker     let _ = kernel_loader::load_elf64(&mem, GuestAddress(0), &mut kimage, 0);
30*bb4ee6a4SAndroid Build Coastguard Worker });
31