blob: b2a2188e645466d9ebcd05ecd099dcdc5cd6e28c [file] [log] [blame]
Jie Jiang44dfd0b2020-12-16 18:09:41 +09001// Copyright 2020 The Chromium OS Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include <base/at_exit.h>
6#include <base/logging.h>
7#include <fuzzer/FuzzedDataProvider.h>
8
9#include "patchpanel/counters_service.h"
10#include "patchpanel/datapath.h"
11#include "patchpanel/firewall.h"
12#include "patchpanel/minijailed_process_runner.h"
13
14namespace patchpanel {
15namespace {
16
17class Environment {
18 public:
19 Environment() {
20 logging::SetMinLogLevel(logging::LOGGING_FATAL); // <- DISABLE LOGGING.
21 }
22 base::AtExitManager at_exit;
23};
24
25class RandomProcessRunner : public MinijailedProcessRunner {
26 public:
27 explicit RandomProcessRunner(FuzzedDataProvider* data_provider)
28 : data_provider_{data_provider} {}
29 RandomProcessRunner(const RandomProcessRunner&) = delete;
30 RandomProcessRunner& operator=(const RandomProcessRunner&) = delete;
31 ~RandomProcessRunner() = default;
32
33 int RunSync(const std::vector<std::string>& argv,
34 bool log_failures,
35 std::string* output) override {
36 if (output) {
37 *output = data_provider_->ConsumeRandomLengthString(10000);
38 }
39 return data_provider_->ConsumeBool();
40 }
41
42 private:
43 FuzzedDataProvider* data_provider_;
44};
45
46extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
47 static Environment env;
48
49 FuzzedDataProvider provider(data, size);
50 RandomProcessRunner runner(&provider);
51 Firewall firewall;
52 Datapath datapath(&runner, &firewall);
53 CountersService counters_svc(&datapath, &runner);
54
55 while (provider.remaining_bytes() > 0) {
56 counters_svc.GetCounters({});
57 }
58
59 return 0;
60}
61
62} // namespace
63} // namespace patchpanel