blob: cc6712a65cf40d790cf1c76e05c2a81d4383e157 [file] [log] [blame]
// Copyright 2019 The ChromiumOS Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
use std::io;
use std::os::unix::io::AsRawFd;
use crate::filesystem::DirEntry;
use crate::filesystem::DirectoryIterator;
use crate::filesystem::FileSystem;
use crate::filesystem::ZeroCopyReader;
use crate::filesystem::ZeroCopyWriter;
use crate::server::Mapper;
use crate::server::Reader;
use crate::server::Server;
use crate::server::Writer;
// Use a file system that does nothing since we are fuzzing the server implementation.
struct NullFs;
impl FileSystem for NullFs {
type Inode = u64;
type Handle = u64;
type DirIter = NullIter;
}
struct NullIter;
impl DirectoryIterator for NullIter {
fn next(&mut self) -> Option<DirEntry> {
None
}
}
struct NullMapper;
impl Mapper for NullMapper {
fn map(
&self,
_mem_offset: u64,
_size: usize,
_fd: &dyn AsRawFd,
_file_offset: u64,
_prot: u32,
) -> io::Result<()> {
Err(io::Error::from_raw_os_error(libc::EOPNOTSUPP))
}
fn unmap(&self, _offset: u64, _size: u64) -> io::Result<()> {
Err(io::Error::from_raw_os_error(libc::EOPNOTSUPP))
}
}
/// Fuzz the server implementation.
pub fn fuzz_server<R: Reader + ZeroCopyReader, W: Writer + ZeroCopyWriter>(r: R, w: W) {
let server = Server::new(NullFs);
let mapper = NullMapper {};
let _ = server.handle_message(r, w, mapper);
}