1 // Copyright 2019 The ChromiumOS Authors 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #![cfg(not(test))] 6 #![no_main] 7 8 #[cfg(unix)] 9 mod fuzzer { 10 use std::convert::TryInto; 11 12 use cros_fuzz::fuzz_target; 13 use devices::virtio::create_descriptor_chain; 14 use devices::virtio::DescriptorType; 15 use devices::virtio::Reader; 16 use devices::virtio::Writer; 17 use fuse::fuzzing::fuzz_server; 18 use vm_memory::GuestAddress; 19 use vm_memory::GuestMemory; 20 21 const MEM_SIZE: u64 = 256 * 1024 * 1024; 22 const BUFFER_ADDR: GuestAddress = GuestAddress(0x100); 23 24 thread_local! { 25 static GUEST_MEM: GuestMemory = GuestMemory::new(&[(GuestAddress(0), MEM_SIZE)]).unwrap(); 26 } 27 28 fuzz_target!(|data| { 29 use DescriptorType::*; 30 31 GUEST_MEM.with(|mem| { 32 mem.write_all_at_addr(data, BUFFER_ADDR).unwrap(); 33 34 let chain = create_descriptor_chain( 35 mem, 36 GuestAddress(0), 37 BUFFER_ADDR, 38 vec![ 39 (Readable, data.len().try_into().unwrap()), 40 ( 41 Writable, 42 (MEM_SIZE as u32) 43 .saturating_sub(data.len().try_into().unwrap()) 44 .saturating_sub(0x100), 45 ), 46 ], 47 0, 48 ) 49 .unwrap(); 50 51 let r = Reader::new(mem.clone(), chain.clone()).unwrap(); 52 let w = Writer::new(mem.clone(), chain).unwrap(); 53 fuzz_server(r, w); 54 }); 55 }); 56 } 57 58 #[cfg(not(unix))] 59 mod fuzzer { 60 use cros_fuzz::fuzz_target; 61 62 fuzz_target!(|_data| {}); 63 } 64