• 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 use std::io;
6 use std::os::unix::io::AsRawFd;
7 
8 use crate::filesystem::DirEntry;
9 use crate::filesystem::DirectoryIterator;
10 use crate::filesystem::FileSystem;
11 use crate::filesystem::ZeroCopyReader;
12 use crate::filesystem::ZeroCopyWriter;
13 use crate::server::Mapper;
14 use crate::server::Reader;
15 use crate::server::Server;
16 use crate::server::Writer;
17 
18 // Use a file system that does nothing since we are fuzzing the server implementation.
19 struct NullFs;
20 impl FileSystem for NullFs {
21     type Inode = u64;
22     type Handle = u64;
23     type DirIter = NullIter;
24 }
25 
26 struct NullIter;
27 impl DirectoryIterator for NullIter {
next(&mut self) -> Option<DirEntry>28     fn next(&mut self) -> Option<DirEntry> {
29         None
30     }
31 }
32 
33 struct NullMapper;
34 impl Mapper for NullMapper {
map( &self, _mem_offset: u64, _size: usize, _fd: &dyn AsRawFd, _file_offset: u64, _prot: u32, ) -> io::Result<()>35     fn map(
36         &self,
37         _mem_offset: u64,
38         _size: usize,
39         _fd: &dyn AsRawFd,
40         _file_offset: u64,
41         _prot: u32,
42     ) -> io::Result<()> {
43         Err(io::Error::from_raw_os_error(libc::EOPNOTSUPP))
44     }
45 
unmap(&self, _offset: u64, _size: u64) -> io::Result<()>46     fn unmap(&self, _offset: u64, _size: u64) -> io::Result<()> {
47         Err(io::Error::from_raw_os_error(libc::EOPNOTSUPP))
48     }
49 }
50 
51 /// Fuzz the server implementation.
fuzz_server<R: Reader + ZeroCopyReader, W: Writer + ZeroCopyWriter>(r: R, w: W)52 pub fn fuzz_server<R: Reader + ZeroCopyReader, W: Writer + ZeroCopyWriter>(r: R, w: W) {
53     let server = Server::new(NullFs);
54     let mapper = NullMapper {};
55 
56     let _ = server.handle_message(r, w, &mapper);
57 }
58