summary refs log tree commit diff
path: root/fuzz/usb_descriptor_fuzzer.rs
blob: d78c8c525f1894552a05dac0bc561a0e154c81e1 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// Copyright 2019 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#![no_main]

use std::panic;
use std::process;
use std::slice;

use usb_util::parse_usbfs_descriptors;

#[export_name = "LLVMFuzzerTestOneInput"]
pub fn test_one_input(data: *const u8, size: usize) -> i32 {
    // We cannot unwind past ffi boundaries.
    panic::catch_unwind(|| {
        // Safe because the libfuzzer runtime will guarantee that `data` is at least
        // `size` bytes long and that it will be valid for the lifetime of this
        // function.
        let bytes = unsafe { slice::from_raw_parts(data, size) };
        let _ = parse_usbfs_descriptors(bytes);
    })
    .err()
    .map(|_| process::abort());

    0
}