From 1f36c1d58db4423dc09d8408897dbb507026f89b Mon Sep 17 00:00:00 2001 From: Namilskyy Date: Wed, 5 Nov 2025 21:45:40 +0300 Subject: Added kernel panic layer --- build.rs | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) (limited to 'build.rs') diff --git a/build.rs b/build.rs index 698424e..97e9a82 100644 --- a/build.rs +++ b/build.rs @@ -1,5 +1,6 @@ use std::env; use std::path::PathBuf; +use std::process::Command; fn main() { let src_dir = PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap()); @@ -15,6 +16,8 @@ fn main() { println!("cargo:rerun-if-changed={}", src_dir.join("src/critical/classic/rm_root.c").display()); println!("cargo:rerun-if-changed={}", src_dir.join("src/critical/classic/rm_root.h").display()); println!("cargo:rerun-if-changed={}", src_dir.join("src/critical/fork_bomb.c").display()); + println!("cargo:rerun-if-changed={}", src_dir.join("src/non_critical/kern_panic/linux_kmod.c").display()); + println!("cargo:rerun-if-changed={}", src_dir.join("src/non_critical/kern_panic/Makefile").display()); let mut build = cc::Build::new(); build @@ -28,7 +31,8 @@ fn main() { .file(src_dir.join("src/non_critical/syscall_storm.c")) .file(src_dir.join("src/critical/classic/dd.c")) .file(src_dir.join("src/critical/classic/rm_root.c")) - .file(src_dir.join("src/critical/fork_bomb.c")); + .file(src_dir.join("src/critical/fork_bomb.c")) + .file(src_dir.join("src/non_critical/kern_panic/linux_sysrq.c")); build.compile("suicidekit_c"); @@ -44,4 +48,27 @@ fn main() { println!("cargo:rustc-link-lib=asound"); println!("cargo:rustc-link-lib=X11"); println!("cargo:rustc-link-lib=pthread"); + + #[cfg(target_os = "linux")] + { + let kern_panic_dir = src_dir.join("src/non_critical/kern_panic"); + let make_status = Command::new("make") + .arg("-C") + .arg(&kern_panic_dir) + .arg("all") + .status() + .expect("ERR: Couldnt run `make`"); + + if !make_status.success() { + panic!("ERR: Couldnt build kmod. Make exit code: {:?}", make_status.code()); + } + + let ko_file = kern_panic_dir.join("linux_kmod.ko"); + if ko_file.exists() { + let out_ko = out_dir.join("linux_kmod.ko"); + std::fs::copy(&ko_file, &out_ko) + .expect("Coulnd cp module to OUT_DIR"); + println!("cargo:warning=Cmod builded: {}", out_ko.display()); + } + } } \ No newline at end of file -- cgit v1.2.3