From 4d45100a63c2eb9354a41e6252bdf0db63edf3fd Mon Sep 17 00:00:00 2001 From: Romain Malmain Date: Tue, 28 May 2024 11:39:24 +0200 Subject: [PATCH] Fix `libafl_qemu.h` (#2250) * fix header for gcc * fix comment --- .../libafl_libfuzzer_runtime/src/merge.rs | 3 ++- libafl_qemu/Cargo.toml | 1 + libafl_qemu/build_linux.rs | 18 ++++++++++++++++++ libafl_qemu/runtime/libafl_qemu.h | 6 +++--- 4 files changed, 24 insertions(+), 4 deletions(-) diff --git a/libafl_libfuzzer/libafl_libfuzzer_runtime/src/merge.rs b/libafl_libfuzzer/libafl_libfuzzer_runtime/src/merge.rs index 2f88a93025..59b56f689d 100644 --- a/libafl_libfuzzer/libafl_libfuzzer_runtime/src/merge.rs +++ b/libafl_libfuzzer/libafl_libfuzzer_runtime/src/merge.rs @@ -236,7 +236,8 @@ pub fn merge( .scheduler_mut() .on_remove(&mut state, idx, &Some(testcase))?; } else { - #[allow(clippy::needless_borrows_for_generic_args)] // False-positive: file_path is used just below + // False-positive: file_path is used just below + #[allow(clippy::needless_borrows_for_generic_args)] rename(&file_path, &new_file_path)?; *file_path = new_file_path; } diff --git a/libafl_qemu/Cargo.toml b/libafl_qemu/Cargo.toml index 2036306015..323eaef225 100644 --- a/libafl_qemu/Cargo.toml +++ b/libafl_qemu/Cargo.toml @@ -100,6 +100,7 @@ libafl_qemu_build = { path = "./libafl_qemu_build", version = "0.12.0" } pyo3-build-config = { version = "0.21", optional = true } rustversion = "1.0" bindgen = "0.69" +cc = "1.0" [lib] name = "libafl_qemu" diff --git a/libafl_qemu/build_linux.rs b/libafl_qemu/build_linux.rs index 4ec63e82e2..210cc4dee3 100644 --- a/libafl_qemu/build_linux.rs +++ b/libafl_qemu/build_linux.rs @@ -6,6 +6,13 @@ use std::{ use libafl_qemu_build::maybe_generate_stub_bindings; +static LIBAFL_QEMU_RUNTIME_TEST: &str = r#" +#include +#include "libafl_qemu.h" + +int main() {} +"#; + #[allow(clippy::too_many_lines)] pub fn build() { // Note: Unique features are checked in libafl_qemu_sys @@ -42,6 +49,17 @@ pub fn build() { let libafl_runtime_dir = src_dir.join("runtime"); let libafl_qemu_hdr = libafl_runtime_dir.join(libafl_qemu_hdr_name); + let libafl_runtime_testfile = out_dir.join("runtime_test.c"); + fs::write(&libafl_runtime_testfile, LIBAFL_QEMU_RUNTIME_TEST).expect("Could not write runtime test file"); + + let mut runtime_test_cc_compiler = cc::Build::new(); + + runtime_test_cc_compiler.cpp(false) + .include(&libafl_runtime_dir) + .file(&libafl_runtime_testfile); + + runtime_test_cc_compiler.try_compile("runtime_test").unwrap(); + let runtime_bindings_file = out_dir.join("libafl_qemu_bindings.rs"); let stub_runtime_bindings_file = src_dir.join("runtime/libafl_qemu_stub_bindings.rs"); diff --git a/libafl_qemu/runtime/libafl_qemu.h b/libafl_qemu/runtime/libafl_qemu.h index 3e10f1b7a7..4ea4fd4233 100644 --- a/libafl_qemu/runtime/libafl_qemu.h +++ b/libafl_qemu/runtime/libafl_qemu.h @@ -87,7 +87,7 @@ typedef enum LibaflQemuEndStatus { libafl_word ret; \ __asm__ volatile ( \ "mov %1, %%rax\n" \ - ".dword " XSTRINGIFY(opcode) "\n" \ + ".4byte " XSTRINGIFY(opcode) "\n" \ "mov %%rax, %0\n" \ : "=g"(ret) \ : "g"(action) \ @@ -102,7 +102,7 @@ typedef enum LibaflQemuEndStatus { __asm__ volatile ( \ "mov %1, %%rax\n" \ "mov %2, %%rdi\n" \ - ".dword " XSTRINGIFY(opcode) "\n" \ + ".4byte " XSTRINGIFY(opcode) "\n" \ "mov %%rax, %0\n" \ : "=g"(ret) \ : "g"(action), "g"(arg1) \ @@ -118,7 +118,7 @@ typedef enum LibaflQemuEndStatus { "mov %1, %%rax\n" \ "mov %2, %%rdi\n" \ "mov %3, %%rsi\n" \ - ".dword " XSTRINGIFY(opcode) "\n" \ + ".4byte " XSTRINGIFY(opcode) "\n" \ "mov %%rax, %0\n" \ : "=g"(ret) \ : "g"(action), "g"(arg1), "g"(arg2) \