13cab2bb3Spatrick //===- FuzzerUtilLinux.cpp - Misc utils for Linux. ------------------------===// 23cab2bb3Spatrick // 33cab2bb3Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 43cab2bb3Spatrick // See https://llvm.org/LICENSE.txt for license information. 53cab2bb3Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 63cab2bb3Spatrick // 73cab2bb3Spatrick //===----------------------------------------------------------------------===// 83cab2bb3Spatrick // Misc utils for Linux. 93cab2bb3Spatrick //===----------------------------------------------------------------------===// 101f9cb04fSpatrick #include "FuzzerPlatform.h" 113cab2bb3Spatrick #if LIBFUZZER_LINUX || LIBFUZZER_NETBSD || LIBFUZZER_FREEBSD || \ 12d89ec533Spatrick LIBFUZZER_EMSCRIPTEN 133cab2bb3Spatrick #include "FuzzerCommand.h" 14*810390e3Srobert #include "FuzzerInternal.h" 153cab2bb3Spatrick 16*810390e3Srobert #include <signal.h> 173cab2bb3Spatrick #include <stdlib.h> 183cab2bb3Spatrick #include <sys/types.h> 193cab2bb3Spatrick #include <sys/wait.h> 203cab2bb3Spatrick #include <unistd.h> 213cab2bb3Spatrick 223cab2bb3Spatrick 233cab2bb3Spatrick namespace fuzzer { 243cab2bb3Spatrick ExecuteCommand(const Command & Cmd)253cab2bb3Spatrickint ExecuteCommand(const Command &Cmd) { 263cab2bb3Spatrick std::string CmdLine = Cmd.toString(); 273cab2bb3Spatrick int exit_code = system(CmdLine.c_str()); 283cab2bb3Spatrick if (WIFEXITED(exit_code)) 293cab2bb3Spatrick return WEXITSTATUS(exit_code); 30*810390e3Srobert if (WIFSIGNALED(exit_code) && WTERMSIG(exit_code) == SIGINT) 31*810390e3Srobert return Fuzzer::InterruptExitCode(); 323cab2bb3Spatrick return exit_code; 333cab2bb3Spatrick } 343cab2bb3Spatrick DiscardOutput(int Fd)353cab2bb3Spatrickvoid DiscardOutput(int Fd) { 363cab2bb3Spatrick FILE* Temp = fopen("/dev/null", "w"); 373cab2bb3Spatrick if (!Temp) 383cab2bb3Spatrick return; 393cab2bb3Spatrick dup2(fileno(Temp), Fd); 403cab2bb3Spatrick fclose(Temp); 413cab2bb3Spatrick } 423cab2bb3Spatrick 433cab2bb3Spatrick } // namespace fuzzer 443cab2bb3Spatrick 453cab2bb3Spatrick #endif 46