• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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