From 3dffc94e5bf110785c9fe96dc96f16dba10c8ac8 Mon Sep 17 00:00:00 2001 From: liuxiaobo Date: Fri, 7 Jun 2024 16:25:53 +0800 Subject: [PATCH] security: sanitize sensitive code 1. rename 'upatch_hijacker' to 'upatch_helper' 2. sanitize all 'hijacker' in source code Signed-off-by: liuxiaobo --- CMakeLists.txt | 2 +- upatch-build/src/{hijacker.rs => helper.rs} | 31 ++++--- upatch-build/src/main.rs | 11 +-- upatch-build/src/project.rs | 2 +- upatch-build/src/rpc/proxy.rs | 4 +- .../CMakeLists.txt | 2 +- upatch-helper/helper/CMakeLists.txt | 35 ++++++++ .../helper/gnu-as-helper.c | 18 ++-- .../helper/gnu-compiler-helper.c | 16 ++-- .../helper/helper.h | 12 +-- upatch-helper/ko/CMakeLists.txt | 32 +++++++ {upatch-hijacker => upatch-helper}/ko/LICENSE | 0 .../ko/Makefile | 2 +- {upatch-hijacker => upatch-helper}/ko/cache.c | 4 +- {upatch-hijacker => upatch-helper}/ko/cache.h | 8 +- .../ko/context.c | 60 ++++++------- .../ko/context.h | 16 ++-- {upatch-hijacker => upatch-helper}/ko/ioctl.c | 82 ++++++++--------- {upatch-hijacker => upatch-helper}/ko/ioctl.h | 22 ++--- {upatch-hijacker => upatch-helper}/ko/log.h | 8 +- {upatch-hijacker => upatch-helper}/ko/main.c | 12 +-- {upatch-hijacker => upatch-helper}/ko/map.c | 2 +- {upatch-hijacker => upatch-helper}/ko/map.h | 8 +- .../ko/records.c | 12 +-- .../ko/records.h | 16 ++-- .../ko/uprobe.c | 16 ++-- .../ko/uprobe.h | 8 +- {upatch-hijacker => upatch-helper}/ko/utils.h | 8 +- upatch-hijacker/hijacker/CMakeLists.txt | 35 -------- upatch-hijacker/ko/CMakeLists.txt | 32 ------- upatch-manage/upatch-patch.c | 4 +- upatchd/src/config.rs | 4 +- upatchd/src/{hijacker => helper}/config.rs | 24 ++--- .../src/{hijacker => helper}/elf_resolver.rs | 0 upatchd/src/{hijacker => helper}/ioctl.rs | 28 +++--- upatchd/src/{hijacker => helper}/kmod.rs | 8 +- upatchd/src/{hijacker => helper}/mod.rs | 87 ++++++++++--------- upatchd/src/main.rs | 4 +- upatchd/src/rpc/skeleton.rs | 8 +- upatchd/src/rpc/skeleton_impl.rs | 30 +++---- 40 files changed, 359 insertions(+), 354 deletions(-) rename upatch-build/src/{hijacker.rs => helper.rs} (69%) rename {upatch-hijacker => upatch-helper}/CMakeLists.txt (81%) create mode 100644 upatch-helper/helper/CMakeLists.txt rename upatch-hijacker/hijacker/gnu-as-hijacker.c => upatch-helper/helper/gnu-as-helper.c (89%) rename upatch-hijacker/hijacker/gnu-compiler-hijacker.c => upatch-helper/helper/gnu-compiler-helper.c (85%) rename upatch-hijacker/hijacker/hijacker.h => upatch-helper/helper/helper.h (83%) create mode 100644 upatch-helper/ko/CMakeLists.txt rename {upatch-hijacker => upatch-helper}/ko/LICENSE (100%) rename {upatch-hijacker => upatch-helper}/ko/Makefile (94%) rename {upatch-hijacker => upatch-helper}/ko/cache.c (94%) rename {upatch-hijacker => upatch-helper}/ko/cache.h (86%) rename {upatch-hijacker => upatch-helper}/ko/context.c (70%) rename {upatch-hijacker => upatch-helper}/ko/context.h (73%) rename {upatch-hijacker => upatch-helper}/ko/ioctl.c (64%) rename {upatch-hijacker => upatch-helper}/ko/ioctl.h (69%) rename {upatch-hijacker => upatch-helper}/ko/log.h (87%) rename {upatch-hijacker => upatch-helper}/ko/main.c (86%) rename {upatch-hijacker => upatch-helper}/ko/map.c (99%) rename {upatch-hijacker => upatch-helper}/ko/map.h (90%) rename {upatch-hijacker => upatch-helper}/ko/records.c (90%) rename {upatch-hijacker => upatch-helper}/ko/records.h (80%) rename {upatch-hijacker => upatch-helper}/ko/uprobe.c (89%) rename {upatch-hijacker => upatch-helper}/ko/uprobe.h (86%) rename {upatch-hijacker => upatch-helper}/ko/utils.h (90%) delete mode 100644 upatch-hijacker/hijacker/CMakeLists.txt delete mode 100644 upatch-hijacker/ko/CMakeLists.txt rename upatchd/src/{hijacker => helper}/config.rs (70%) rename upatchd/src/{hijacker => helper}/elf_resolver.rs (100%) rename upatchd/src/{hijacker => helper}/ioctl.rs (80%) rename upatchd/src/{hijacker => helper}/kmod.rs (95%) rename upatchd/src/{hijacker => helper}/mod.rs (52%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4858ba5..659222f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -66,7 +66,7 @@ set(CMAKE_EXE_LINKER_FLAGS "${LINK_FLAGS}") # Subdirectories add_subdirectory(upatch-diff) add_subdirectory(upatch-manage) -add_subdirectory(upatch-hijacker) +add_subdirectory(upatch-helper) add_subdirectory(misc) # Build rust executables diff --git a/upatch-build/src/hijacker.rs b/upatch-build/src/helper.rs similarity index 69% rename from upatch-build/src/hijacker.rs rename to upatch-build/src/helper.rs index 3060495..7ce3323 100644 --- a/upatch-build/src/hijacker.rs +++ b/upatch-build/src/helper.rs @@ -9,13 +9,13 @@ use crate::rpc::{RpcRemote, UpatchProxy}; const UPATCHD_SOCKET_NAME: &str = "upatchd.sock"; -pub struct Hijacker<'a> { +pub struct UpatchHelper<'a> { proxy: UpatchProxy, programs: IndexSet<&'a Path>, finished: Vec<&'a Path>, } -impl<'a> Hijacker<'a> { +impl<'a> UpatchHelper<'a> { pub fn new(compilers: I, work_dir: P) -> Result where I: IntoIterator, @@ -36,20 +36,20 @@ impl<'a> Hijacker<'a> { programs, finished: vec![], }; - instance.hijack()?; + instance.enable()?; Ok(instance) } } -impl Hijacker<'_> { - fn hijack(&mut self) -> Result<()> { - info!("Hijacking compiler(s)"); +impl UpatchHelper<'_> { + fn enable(&mut self) -> Result<()> { + info!("Hooking compiler(s)"); for exec_path in &self.programs { info!("- {}", exec_path.display()); self.proxy - .enable_hijack(exec_path) - .with_context(|| format!("Failed to hijack {}", exec_path.display()))?; + .hook_compiler(exec_path) + .with_context(|| format!("Failed to hook compiler {}", exec_path.display()))?; self.finished.push(exec_path); } @@ -57,14 +57,13 @@ impl Hijacker<'_> { Ok(()) } - fn unhack(&mut self) { - info!("Releasing compiler(s)"); + fn disable(&mut self) { + info!("Unhooking compiler(s)"); while let Some(exec_path) = self.finished.pop() { info!("- {}", exec_path.display()); - let result = self - .proxy - .disable_hijack(exec_path) - .with_context(|| format!("Failed to release {}", exec_path.display())); + let result = self.proxy.unhook_compiler(exec_path).with_context(|| { + format!("Failed to unhook compiler helper {}", exec_path.display()) + }); if let Err(e) = result { error!("{:?}", e); @@ -73,8 +72,8 @@ impl Hijacker<'_> { } } -impl Drop for Hijacker<'_> { +impl Drop for UpatchHelper<'_> { fn drop(&mut self) { - self.unhack() + self.disable() } } diff --git a/upatch-build/src/main.rs b/upatch-build/src/main.rs index 473b0a7..769cc6c 100644 --- a/upatch-build/src/main.rs +++ b/upatch-build/src/main.rs @@ -36,7 +36,7 @@ mod compiler; mod dwarf; mod elf; mod file_relation; -mod hijacker; +mod helper; mod pattern_path; mod project; mod resolve; @@ -47,7 +47,7 @@ use build_root::BuildRoot; use compiler::Compiler; use dwarf::Dwarf; use file_relation::FileRelation; -use hijacker::Hijacker; +use helper::UpatchHelper; use project::Project; const CLI_NAME: &str = "upatch build"; @@ -401,7 +401,8 @@ impl UpatchBuild { } let mut files = FileRelation::new(); - let hijacker = Hijacker::new(&compilers, work_dir).context("Failed to hack compilers")?; + let upatch_helper = + UpatchHelper::new(&compilers, work_dir).context("Failed to hook compilers")?; info!("Preparing {}", project); project @@ -435,8 +436,8 @@ impl UpatchBuild { info!("Collecting file relations"); files.collect_patched_build(object_dir, patched_dir)?; - // Unhack compilers - drop(hijacker); + // Restore compilers + drop(upatch_helper); let build_info = BuildInfo { linker, diff --git a/upatch-build/src/project.rs b/upatch-build/src/project.rs index b36c26b..8b2a7b6 100644 --- a/upatch-build/src/project.rs +++ b/upatch-build/src/project.rs @@ -28,7 +28,7 @@ use syscare_common::{fs, process::Command}; use crate::{args::Arguments, build_root::BuildRoot}; const PATCH_BIN: &str = "patch"; -const COMPILER_CMD_ENV: &str = "UPATCH_HIJACKER"; +const COMPILER_CMD_ENV: &str = "UPATCH_HELPER"; const PREPARE_SCRIPT_NAME: &str = "prepare.sh"; const BUILD_SCRIPT_NAME: &str = "build.sh"; diff --git a/upatch-build/src/rpc/proxy.rs b/upatch-build/src/rpc/proxy.rs index e249fa5..f63d681 100644 --- a/upatch-build/src/rpc/proxy.rs +++ b/upatch-build/src/rpc/proxy.rs @@ -30,7 +30,7 @@ impl UpatchProxy { } #[named] - pub fn enable_hijack>(&self, exec_path: P) -> Result<()> { + pub fn hook_compiler>(&self, exec_path: P) -> Result<()> { self.remote.call_with_args( function_name!(), RpcArguments::new().arg(exec_path.as_ref().to_path_buf()), @@ -38,7 +38,7 @@ impl UpatchProxy { } #[named] - pub fn disable_hijack>(&self, exec_path: P) -> Result<()> { + pub fn unhook_compiler>(&self, exec_path: P) -> Result<()> { self.remote.call_with_args( function_name!(), RpcArguments::new().arg(exec_path.as_ref().to_path_buf()), diff --git a/upatch-hijacker/CMakeLists.txt b/upatch-helper/CMakeLists.txt similarity index 81% rename from upatch-hijacker/CMakeLists.txt rename to upatch-helper/CMakeLists.txt index 77d1010..bcd7295 100644 --- a/upatch-hijacker/CMakeLists.txt +++ b/upatch-helper/CMakeLists.txt @@ -3,4 +3,4 @@ include_directories(${CMAKE_CURRENT_LIST_DIR}) # Build components add_subdirectory(ko) -add_subdirectory(hijacker) +add_subdirectory(helper) diff --git a/upatch-helper/helper/CMakeLists.txt b/upatch-helper/helper/CMakeLists.txt new file mode 100644 index 0000000..fefcebe --- /dev/null +++ b/upatch-helper/helper/CMakeLists.txt @@ -0,0 +1,35 @@ +# Build helpers +add_executable(gnu-as-helper gnu-as-helper.c) +add_executable(gnu-compiler-helper gnu-compiler-helper.c) + +# Generate helpers +add_custom_target(generate-upatch-helpers ALL + COMMENT "Generating upatch helpers..." + COMMAND ln -f gnu-as-helper as-helper + COMMAND ln -f gnu-compiler-helper gcc-helper + COMMAND ln -f gnu-compiler-helper g++-helper + COMMAND ln -f gnu-compiler-helper cc-helper + COMMAND ln -f gnu-compiler-helper c++-helper + DEPENDS + gnu-as-helper + gnu-compiler-helper + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} +) + +# Install helpers +install( + PROGRAMS + ${CMAKE_CURRENT_BINARY_DIR}/gnu-as-helper + ${CMAKE_CURRENT_BINARY_DIR}/gnu-compiler-helper + ${CMAKE_CURRENT_BINARY_DIR}/as-helper + ${CMAKE_CURRENT_BINARY_DIR}/gcc-helper + ${CMAKE_CURRENT_BINARY_DIR}/g++-helper + ${CMAKE_CURRENT_BINARY_DIR}/cc-helper + ${CMAKE_CURRENT_BINARY_DIR}/c++-helper + PERMISSIONS + OWNER_EXECUTE OWNER_WRITE OWNER_READ + GROUP_EXECUTE GROUP_READ + WORLD_READ WORLD_EXECUTE + DESTINATION + ${SYSCARE_LIBEXEC_DIR} +) diff --git a/upatch-hijacker/hijacker/gnu-as-hijacker.c b/upatch-helper/helper/gnu-as-helper.c similarity index 89% rename from upatch-hijacker/hijacker/gnu-as-hijacker.c rename to upatch-helper/helper/gnu-as-helper.c index 886420e..05246c3 100644 --- a/upatch-hijacker/hijacker/gnu-as-hijacker.c +++ b/upatch-helper/helper/gnu-as-helper.c @@ -1,7 +1,7 @@ // SPDX-License-Identifier: Mulan PSL v2 /* * Copyright (c) 2024 Huawei Technologies Co., Ltd. - * gnu-as-hijacker is licensed under Mulan PSL v2. + * gnu-as-helper is licensed under Mulan PSL v2. * You can use this software according to the terms and conditions of the Mulan PSL v2. * You may obtain a copy of Mulan PSL v2 at: * http://license.coscl.org.cn/MulanPSL2 @@ -20,7 +20,7 @@ #include #include -#include "hijacker.h" +#include "helper.h" #ifndef SYS_gettid #error "SYS_gettid is unavailable on this system" @@ -39,8 +39,8 @@ static char g_new_output_file[PATH_MAX] = { 0 }; /* * The whole part: * 1. Someone called execve() to run a compiler (inode). - * 2. If the inode was registered, under layer would rewrite argv[0] to hijacker path. - * 3. Hijacker would add some arguments and calls execve() again. + * 2. If the inode was registered, under layer would rewrite argv[0] to helper path. + * 3. Helper would add some arguments and calls execve() again. * 4. Under layer redirects argv[0] to original path. * Pid would keep same. */ @@ -53,27 +53,27 @@ int main(int argc, char *argv[], char *envp[]) return -ENOENT; } - // If there is no env, stop hijack - const char *output_dir = get_hijacker_env(); + // If there is no env, stop helper + const char *output_dir = get_helper_env(); if (output_dir == NULL) { return execve(filename, argv, envp); } - // If output dir is not a directory, stop hijack + // If output dir is not a directory, stop helper struct stat output_dir_stat; if ((stat(output_dir, &output_dir_stat) != 0) || (!S_ISDIR(output_dir_stat.st_mode))) { return execve(filename, argv, envp); } - // If there is no output, stop hijack + // If there is no output, stop helper int output_index = find_output_flag(argc, argv); if (output_index < 0) { return execve(filename, argv, envp); } output_index += 1; - // If the output is null device, stop hijack + // If the output is null device, stop helper const char *output_file = argv[output_index]; if (strncmp(output_file, NULL_DEV_PATH, strlen(NULL_DEV_PATH)) == 0) { return execve(filename, argv, envp); diff --git a/upatch-hijacker/hijacker/gnu-compiler-hijacker.c b/upatch-helper/helper/gnu-compiler-helper.c similarity index 85% rename from upatch-hijacker/hijacker/gnu-compiler-hijacker.c rename to upatch-helper/helper/gnu-compiler-helper.c index d868467..507d709 100644 --- a/upatch-hijacker/hijacker/gnu-compiler-hijacker.c +++ b/upatch-helper/helper/gnu-compiler-helper.c @@ -1,7 +1,7 @@ // SPDX-License-Identifier: Mulan PSL v2 /* * Copyright (c) 2024 Huawei Technologies Co., Ltd. - * gnu-compiler-hijacker is licensed under Mulan PSL v2. + * gnu-compiler-helper is licensed under Mulan PSL v2. * You can use this software according to the terms and conditions of the Mulan PSL v2. * You may obtain a copy of Mulan PSL v2 at: * http://license.coscl.org.cn/MulanPSL2 @@ -14,7 +14,7 @@ #include -#include "hijacker.h" +#include "helper.h" static char* APPEND_ARGS[] = { "-gdwarf", /* obatain debug information */ @@ -27,8 +27,8 @@ static const int APPEND_ARG_LEN = (int)(sizeof(APPEND_ARGS) / sizeof(char *)); /* * The whole part: * 1. Someone called execve() to run a compiler (inode). - * 2. If the inode was registered, under layer would rewrite argv[0] to hijacker path. - * 3. Hijacker would add some arguments and calls execve() again. + * 2. If the inode was registered, under layer would rewrite argv[0] to helper path. + * 3. Helper would add some arguments and calls execve() again. * 4. Under layer redirects argv[0] to original path. * Pid would keep same. */ @@ -40,13 +40,13 @@ int main(int argc, char *argv[], char *envp[]) return -ENOENT; } - // If there is no env, stop hijack - const char *hijacker_env = get_hijacker_env(); - if (hijacker_env == NULL) { + // If there is no env, stop helper + const char *helper_env = get_helper_env(); + if (helper_env == NULL) { return execve(filename, argv, envp); } - // If there is no output, stop hijack + // If there is no output, stop helper if (find_output_flag(argc, argv) < 0) { return execve(filename, argv, envp); } diff --git a/upatch-hijacker/hijacker/hijacker.h b/upatch-helper/helper/helper.h similarity index 83% rename from upatch-hijacker/hijacker/hijacker.h rename to upatch-helper/helper/helper.h index cc820ee..67a895c 100644 --- a/upatch-hijacker/hijacker/hijacker.h +++ b/upatch-helper/helper/helper.h @@ -1,7 +1,7 @@ // SPDX-License-Identifier: Mulan PSL v2 /* * Copyright (c) 2024 Huawei Technologies Co., Ltd. - * gnu-compiler-hijacker is licensed under Mulan PSL v2. + * gnu-compiler-helper is licensed under Mulan PSL v2. * You can use this software according to the terms and conditions of the Mulan PSL v2. * You may obtain a copy of Mulan PSL v2 at: * http://license.coscl.org.cn/MulanPSL2 @@ -12,8 +12,8 @@ * See the Mulan PSL v2 for more details. */ -#ifndef __UPATCH_HIJACKER_COMMON_H -#define __UPATCH_HIJACKER_COMMON_H +#ifndef __UPATCH_HELPER_COMMON_H +#define __UPATCH_HELPER_COMMON_H #include #include @@ -22,7 +22,7 @@ #include -static const char *UPATCH_ENV_NAME = "UPATCH_HIJACKER"; +static const char *UPATCH_ENV_NAME = "UPATCH_HELPER"; static const char *EXEC_SELF_PATH = "/proc/self/exe"; static const char *OUTPUT_FLAG_NAME = "-o"; @@ -39,7 +39,7 @@ static inline char* get_current_exec(void) return (char *)g_filename; } -static inline const char* get_hijacker_env(void) +static inline const char* get_helper_env(void) { return getenv(UPATCH_ENV_NAME); } @@ -58,4 +58,4 @@ static inline int find_output_flag(int argc, char* const argv[]) return -EINVAL; } -#endif /* __UPATCH_HIJACKER_COMMON_H */ +#endif /* __UPATCH_HELPER_COMMON_H */ diff --git a/upatch-helper/ko/CMakeLists.txt b/upatch-helper/ko/CMakeLists.txt new file mode 100644 index 0000000..2a5b980 --- /dev/null +++ b/upatch-helper/ko/CMakeLists.txt @@ -0,0 +1,32 @@ +# Build upatch-helper kernel module + +# Set target +set(UPATCH_HELPER_KMOD "upatch_helper.ko") + +# Detect kernel source path +if (DEFINED KERNEL_VERSION) + set(KERNEL_SOURCE_PATH "/lib/modules/${KERNEL_VERSION}/build") + set(UPATCH_HELPER_KMOD_BUILD_CMD make module_version=${BUILD_VERSION} kernel=${KERNEL_SOURCE_PATH}) +else() + set(UPATCH_HELPER_KMOD_BUILD_CMD make module_version=${BUILD_VERSION}) +endif() + +# Build kernel module +add_custom_target(upatch-helper-kmod ALL + COMMENT "Building kernel module upatch_helper..." + BYPRODUCTS ${UPATCH_HELPER_KMOD} + COMMAND ${UPATCH_HELPER_KMOD_BUILD_CMD} + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} +) + +# Install kernel module +install( + FILES + ${UPATCH_HELPER_KMOD} + PERMISSIONS + OWNER_WRITE OWNER_READ + GROUP_READ + WORLD_READ + DESTINATION + ${SYSCARE_LIBEXEC_DIR} +) diff --git a/upatch-hijacker/ko/LICENSE b/upatch-helper/ko/LICENSE similarity index 100% rename from upatch-hijacker/ko/LICENSE rename to upatch-helper/ko/LICENSE diff --git a/upatch-hijacker/ko/Makefile b/upatch-helper/ko/Makefile similarity index 94% rename from upatch-hijacker/ko/Makefile rename to upatch-helper/ko/Makefile index ebf6314..6ea3b72 100644 --- a/upatch-hijacker/ko/Makefile +++ b/upatch-helper/ko/Makefile @@ -1,4 +1,4 @@ -module_name ?= upatch_hijacker +module_name ?= upatch_helper module_version ?= "1.0-dev" kernel ?= /lib/modules/$(shell uname -r)/build diff --git a/upatch-hijacker/ko/cache.c b/upatch-helper/ko/cache.c similarity index 94% rename from upatch-hijacker/ko/cache.c rename to upatch-helper/ko/cache.c index b5af6bf..4a5994f 100644 --- a/upatch-hijacker/ko/cache.c +++ b/upatch-helper/ko/cache.c @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0 /* - * upatch-hijacker kernel module + * upatch-helper kernel module * Copyright (C) 2024 Huawei Technologies Co., Ltd. * * This program is free software; you can redistribute it and/or modify @@ -24,7 +24,7 @@ #include "log.h" -static const char *CACHE_SLAB_NAME = "upatch_hijacker"; +static const char *CACHE_SLAB_NAME = "upatch_helper"; static struct kmem_cache *g_path_cache = NULL; diff --git a/upatch-hijacker/ko/cache.h b/upatch-helper/ko/cache.h similarity index 86% rename from upatch-hijacker/ko/cache.h rename to upatch-helper/ko/cache.h index e26a49c..b9bdcc4 100644 --- a/upatch-hijacker/ko/cache.h +++ b/upatch-helper/ko/cache.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0 /* - * upatch-hijacker kernel module + * upatch-helper kernel module * Copyright (C) 2024 Huawei Technologies Co., Ltd. * * This program is free software; you can redistribute it and/or modify @@ -18,8 +18,8 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#ifndef _UPATCH_HIJACKER_KO_CACHE_H -#define _UPATCH_HIJACKER_KO_CACHE_H +#ifndef _UPATCH_HELPER_KO_CACHE_H +#define _UPATCH_HELPER_KO_CACHE_H int cache_init(void); void cache_exit(void); @@ -27,4 +27,4 @@ void cache_exit(void); char *path_buf_alloc(void); void path_buf_free(char *buff); -#endif /* _UPATCH_HIJACKER_KO_CACHE_H */ +#endif /* _UPATCH_HELPER_KO_CACHE_H */ diff --git a/upatch-hijacker/ko/context.c b/upatch-helper/ko/context.c similarity index 70% rename from upatch-hijacker/ko/context.c rename to upatch-helper/ko/context.c index 2e406f4..3a6c920 100644 --- a/upatch-hijacker/ko/context.c +++ b/upatch-helper/ko/context.c @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0 /* - * upatch-hijacker kernel module + * upatch-helper kernel module * Copyright (C) 2024 Huawei Technologies Co., Ltd. * * This program is free software; you can redistribute it and/or modify @@ -34,34 +34,34 @@ struct context { struct pid_namespace *ns; struct uprobe_record *uprobe; - struct map *hijacker_map; + struct map *helper_map; }; -static bool find_hijacker_context(const struct context *context, +static bool find_helper_context(const struct context *context, const struct pid_namespace *ns); -static void free_hijacker_context(struct context *context); +static void free_helper_context(struct context *context); -static const struct map_ops HIJACK_MAP_OPS = { - .find_value = (find_value_fn)find_hijacker_record, - .free_value = (free_value_fn)free_hijacker_record, +static const struct map_ops HELPER_MAP_OPS = { + .find_value = (find_value_fn)find_helper_record, + .free_value = (free_value_fn)free_helper_record, }; static const struct map_ops CONTEXT_MAP_OPS = { - .find_value = (find_value_fn)find_hijacker_context, - .free_value = (free_value_fn)free_hijacker_context, + .find_value = (find_value_fn)find_helper_context, + .free_value = (free_value_fn)free_helper_context, }; static const size_t MAX_CONTEXT_NUM = 1024; -static const size_t HIJACKER_PER_CONTEXT = 16; +static const size_t HELPER_PER_CONTEXT = 16; static struct map *g_context_map = NULL; /* Context private interface */ -static int create_hijacker_context(struct context **context, +static int create_helper_context(struct context **context, struct pid_namespace *ns, const char *path, loff_t offset) { struct context *new_context = NULL; struct uprobe_record *uprobe = NULL; - struct map *hijacker_map = NULL; + struct map *helper_map = NULL; int ret = 0; new_context = kzalloc(sizeof(struct context), GFP_KERNEL); @@ -70,9 +70,9 @@ static int create_hijacker_context(struct context **context, return -ENOMEM; } - ret = new_map(&hijacker_map, HIJACKER_PER_CONTEXT, &HIJACK_MAP_OPS); + ret = new_map(&helper_map, HELPER_PER_CONTEXT, &HELPER_MAP_OPS); if (ret != 0) { - pr_err("failed to create hijacker map, ret=%d\n", ret); + pr_err("failed to create helper map, ret=%d\n", ret); kfree(new_context); return ret; } @@ -80,7 +80,7 @@ static int create_hijacker_context(struct context **context, ret = new_uprobe_record(&uprobe, handle_uprobe, path, offset); if (ret != 0) { pr_err("failed to create uprobe record, ret=%d\n", ret); - free_map(hijacker_map); + free_map(helper_map); kfree(new_context); return ret; } @@ -90,20 +90,20 @@ static int create_hijacker_context(struct context **context, pr_err("failed to register uprobe, inode=%lu, offset=0x%llx, ret=%d\n", uprobe->inode->i_ino, uprobe->offset, ret); free_uprobe_record(uprobe); - free_map(hijacker_map); + free_map(helper_map); kfree(new_context); return ret; } new_context->ns = get_pid_ns(ns); new_context->uprobe = uprobe; - new_context->hijacker_map = hijacker_map; + new_context->helper_map = helper_map; *context = new_context; return 0; } -static void free_hijacker_context(struct context *context) +static void free_helper_context(struct context *context) { if (context == NULL) { return; @@ -114,11 +114,11 @@ static void free_hijacker_context(struct context *context) put_pid_ns(context->ns); free_uprobe_record(context->uprobe); - free_map(context->hijacker_map); + free_map(context->helper_map); kfree(context); } -static bool find_hijacker_context(const struct context *context, +static bool find_helper_context(const struct context *context, const struct pid_namespace *ns) { return ns_equal(context->ns, ns); @@ -143,7 +143,7 @@ void context_exit(void) free_map(g_context_map); } -int build_hijacker_context(const char *path, loff_t offset) +int build_helper_context(const char *path, loff_t offset) { struct pid_namespace *ns = task_active_pid_ns(current); struct context *context = NULL; @@ -153,37 +153,37 @@ int build_hijacker_context(const char *path, loff_t offset) return -EINVAL; } - ret = create_hijacker_context(&context, ns, path, offset); + ret = create_helper_context(&context, ns, path, offset); if (ret != 0) { - pr_err("failed to create hijacker context, ret=%d\n", ret); + pr_err("failed to create helper context, ret=%d\n", ret); return ret; } - pr_debug("hijacker context, addr=0x%lx\n", (unsigned long)context); + pr_debug("helper context, addr=0x%lx\n", (unsigned long)context); ret = map_insert(g_context_map, context); if (ret != 0) { - pr_err("failed to register hijacker context, ret=%d\n", ret); + pr_err("failed to register helper context, ret=%d\n", ret); return ret; } return 0; } -void destroy_hijacker_context(void) +void destroy_helper_context(void) { - pr_debug("destroy hijacker context\n"); + pr_debug("destroy helper context\n"); map_remove(g_context_map, task_active_pid_ns(current)); } -size_t hijacker_context_count(void) +size_t helper_context_count(void) { return map_size(g_context_map); } -struct map *get_hijacker_map(void) +struct map *get_helper_map(void) { struct pid_namespace *ns = task_active_pid_ns(current); struct context *context = (struct context *)map_get(g_context_map, ns); - return (context != NULL) ? context->hijacker_map : NULL; + return (context != NULL) ? context->helper_map : NULL; } diff --git a/upatch-hijacker/ko/context.h b/upatch-helper/ko/context.h similarity index 73% rename from upatch-hijacker/ko/context.h rename to upatch-helper/ko/context.h index 6b5a50f..2054b75 100644 --- a/upatch-hijacker/ko/context.h +++ b/upatch-helper/ko/context.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0 /* - * upatch-hijacker kernel module + * upatch-helper kernel module * Copyright (C) 2024 Huawei Technologies Co., Ltd. * * This program is free software; you can redistribute it and/or modify @@ -18,8 +18,8 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#ifndef _UPATCH_HIJACKER_KO_CONTEXT_H -#define _UPATCH_HIJACKER_KO_CONTEXT_H +#ifndef _UPATCH_HELPER_KO_CONTEXT_H +#define _UPATCH_HELPER_KO_CONTEXT_H #include @@ -28,10 +28,10 @@ struct map; int context_init(void); void context_exit(void); -int build_hijacker_context(const char *path, loff_t offset); -void destroy_hijacker_context(void); -size_t hijacker_context_count(void); +int build_helper_context(const char *path, loff_t offset); +void destroy_helper_context(void); +size_t helper_context_count(void); -struct map *get_hijacker_map(void); +struct map *get_helper_map(void); -#endif /* _UPATCH_HIJACKER_KO_CONTEXT_H */ +#endif /* _UPATCH_HELPER_KO_CONTEXT_H */ diff --git a/upatch-hijacker/ko/ioctl.c b/upatch-helper/ko/ioctl.c similarity index 64% rename from upatch-hijacker/ko/ioctl.c rename to upatch-helper/ko/ioctl.c index f76b5fb..500e7d4 100644 --- a/upatch-hijacker/ko/ioctl.c +++ b/upatch-helper/ko/ioctl.c @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0 /* - * upatch-hijacker kernel module + * upatch-helper kernel module * Copyright (C) 2024 Huawei Technologies Co., Ltd. * * This program is free software; you can redistribute it and/or modify @@ -32,19 +32,19 @@ #include "context.h" #include "utils.h" -static const struct file_operations HIJACKER_DEV_FOPS = { +static const struct file_operations HELPER_DEV_FOPS = { .owner = THIS_MODULE, .unlocked_ioctl = handle_ioctl, }; -static struct miscdevice g_hijacker_dev = { +static struct miscdevice g_helper_dev = { .minor = MISC_DYNAMIC_MINOR, - .mode = UPATCH_HIJACKER_DEV_MODE, - .name = UPATCH_HIJACKER_DEV_NAME, - .fops = &HIJACKER_DEV_FOPS, + .mode = UPATCH_HELPER_DEV_MODE, + .name = UPATCH_HELPER_DEV_NAME, + .fops = &HELPER_DEV_FOPS, }; -static inline int handle_enable_hijacker(void __user *arg) +static inline int handle_enable_helper(void __user *arg) { int ret = 0; upatch_enable_request_t *msg = NULL; @@ -62,10 +62,10 @@ static inline int handle_enable_hijacker(void __user *arg) return -EFAULT; } - pr_debug("enable hijacker, path=%s, offset=0x%llx\n", msg->path, msg->offset); - ret = build_hijacker_context(msg->path, msg->offset); + pr_debug("enable helper, path=%s, offset=0x%llx\n", msg->path, msg->offset); + ret = build_helper_context(msg->path, msg->offset); if (ret != 0) { - pr_err("failed to build hijacker context, ret=%d\n", ret); + pr_err("failed to build helper context, ret=%d\n", ret); kfree(msg); } @@ -73,21 +73,21 @@ static inline int handle_enable_hijacker(void __user *arg) return 0; } -static inline void handle_disable_hijacker(void) +static inline void handle_disable_helper(void) { - pr_debug("disable hijacker\n"); - destroy_hijacker_context(); + pr_debug("disable helper\n"); + destroy_helper_context(); } -static inline int handle_register_hijacker(void __user *arg) +static inline int handle_register_helper(void __user *arg) { upatch_register_request_t *msg = NULL; - struct map *hijacker_map = get_hijacker_map(); - struct hijacker_record *record = NULL; + struct map *helper_map = get_helper_map(); + struct helper_record *record = NULL; int ret = 0; - if (hijacker_map == NULL) { - pr_err("failed to get hijacker map\n"); + if (helper_map == NULL) { + pr_err("failed to get helper map\n"); return -EFAULT; } @@ -104,21 +104,21 @@ static inline int handle_register_hijacker(void __user *arg) return -EFAULT; } - ret = create_hijacker_record(&record, msg->exec_path, msg->jump_path); + ret = create_helper_record(&record, msg->exec_path, msg->jump_path); if (ret != 0) { - pr_err("failed to create hijacker record [%s -> %s], ret=%d\n", + pr_err("failed to create helper record [%s -> %s], ret=%d\n", msg->exec_path, msg->jump_path, ret); kfree(msg); return ret; } - pr_debug("register hijacker, inode=%lu, addr=0x%lx\n", + pr_debug("register helper, inode=%lu, addr=0x%lx\n", record->exec_inode->i_ino, (unsigned long)record); - ret = map_insert(get_hijacker_map(), record); + ret = map_insert(get_helper_map(), record); if (ret != 0) { - pr_err("failed to register hijacker record [%s -> %s], ret=%d\n", + pr_err("failed to register helper record [%s -> %s], ret=%d\n", msg->exec_path, msg->jump_path, ret); - free_hijacker_record(record); + free_helper_record(record); kfree(msg); return ret; } @@ -127,16 +127,16 @@ static inline int handle_register_hijacker(void __user *arg) return 0; } -static inline int handle_unregister_hijacker(void __user *arg) +static inline int handle_unregister_helper(void __user *arg) { upatch_register_request_t *msg = NULL; - struct map *hijacker_map = get_hijacker_map(); + struct map *helper_map = get_helper_map(); struct inode *inode = NULL; int ret = 0; - if (hijacker_map == NULL) { - pr_err("failed to get hijacker map\n"); + if (helper_map == NULL) { + pr_err("failed to get helper map\n"); return -EFAULT; } @@ -161,8 +161,8 @@ static inline int handle_unregister_hijacker(void __user *arg) return -ENOENT; } - pr_debug("remove hijacker, inode=%lu\n", inode->i_ino); - map_remove(hijacker_map, inode); + pr_debug("remove helper, inode=%lu\n", inode->i_ino); + map_remove(helper_map, inode); kfree(msg); return 0; @@ -172,7 +172,7 @@ int ioctl_init(void) { int ret = 0; - ret = misc_register(&g_hijacker_dev); + ret = misc_register(&g_helper_dev); if (ret != 0) { pr_err("failed to register misc device, ret=%d\n", ret); } @@ -182,7 +182,7 @@ int ioctl_init(void) void ioctl_exit(void) { - misc_deregister(&g_hijacker_dev); + misc_deregister(&g_helper_dev); } long handle_ioctl(struct file *file, @@ -190,23 +190,23 @@ long handle_ioctl(struct file *file, { int ret = 0; - if (_IOC_TYPE(cmd) != UPATCH_HIJACKER_IOC_MAGIC) { + if (_IOC_TYPE(cmd) != UPATCH_HELPER_IOC_MAGIC) { pr_info("invalid command\n"); return -EBADMSG; } switch (cmd) { - case UPATCH_HIJACKER_ENABLE: - ret = handle_enable_hijacker((void __user *)arg); + case UPATCH_HELPER_ENABLE: + ret = handle_enable_helper((void __user *)arg); break; - case UPATCH_HIJACKER_DISABLE: - handle_disable_hijacker(); + case UPATCH_HELPER_DISABLE: + handle_disable_helper(); break; - case UPATCH_HIJACKER_REGISTER: - ret = handle_register_hijacker((void __user *)arg); + case UPATCH_HELPER_REGISTER: + ret = handle_register_helper((void __user *)arg); break; - case UPATCH_HIJACKER_UNREGISTER: - ret = handle_unregister_hijacker((void __user *)arg); + case UPATCH_HELPER_UNREGISTER: + ret = handle_unregister_helper((void __user *)arg); break; default: ret = -EBADMSG; diff --git a/upatch-hijacker/ko/ioctl.h b/upatch-helper/ko/ioctl.h similarity index 69% rename from upatch-hijacker/ko/ioctl.h rename to upatch-helper/ko/ioctl.h index dbcd12e..fd49961 100644 --- a/upatch-hijacker/ko/ioctl.h +++ b/upatch-helper/ko/ioctl.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0 /* - * upatch-hijacker kernel module + * upatch-helper kernel module * Copyright (C) 2024 Huawei Technologies Co., Ltd. * * This program is free software; you can redistribute it and/or modify @@ -18,22 +18,22 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#ifndef _UPATCH_HIJACKER_KO_IOCTL_H -#define _UPATCH_HIJACKER_KO_IOCTL_H +#ifndef _UPATCH_HELPER_KO_IOCTL_H +#define _UPATCH_HELPER_KO_IOCTL_H #include #include -#define UPATCH_HIJACKER_DEV_NAME "upatch-hijacker" -#define UPATCH_HIJACKER_DEV_MODE 0600 +#define UPATCH_HELPER_DEV_NAME "upatch-helper" +#define UPATCH_HELPER_DEV_MODE 0600 -#define UPATCH_HIJACKER_IOC_MAGIC 0xE5 -#define UPATCH_HIJACKER_ENABLE _IOW(UPATCH_HIJACKER_IOC_MAGIC, 0x1, \ +#define UPATCH_HELPER_IOC_MAGIC 0xE5 +#define UPATCH_HELPER_ENABLE _IOW(UPATCH_HELPER_IOC_MAGIC, 0x1, \ upatch_enable_request_t) -#define UPATCH_HIJACKER_DISABLE _IO(UPATCH_HIJACKER_IOC_MAGIC, 0x2) -#define UPATCH_HIJACKER_REGISTER _IOW(UPATCH_HIJACKER_IOC_MAGIC, 0x3, \ +#define UPATCH_HELPER_DISABLE _IO(UPATCH_HELPER_IOC_MAGIC, 0x2) +#define UPATCH_HELPER_REGISTER _IOW(UPATCH_HELPER_IOC_MAGIC, 0x3, \ upatch_register_request_t) -#define UPATCH_HIJACKER_UNREGISTER _IOW(UPATCH_HIJACKER_IOC_MAGIC, 0x4, \ +#define UPATCH_HELPER_UNREGISTER _IOW(UPATCH_HELPER_IOC_MAGIC, 0x4, \ upatch_register_request_t) typedef struct { @@ -52,4 +52,4 @@ int ioctl_init(void); void ioctl_exit(void); long handle_ioctl(struct file *file, unsigned int cmd, unsigned long arg); -#endif /* _UPATCH_HIJACKER_KO_IOCTL_H */ +#endif /* _UPATCH_HELPER_KO_IOCTL_H */ diff --git a/upatch-hijacker/ko/log.h b/upatch-helper/ko/log.h similarity index 87% rename from upatch-hijacker/ko/log.h rename to upatch-helper/ko/log.h index 2aede01..5341d10 100644 --- a/upatch-hijacker/ko/log.h +++ b/upatch-helper/ko/log.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0 /* - * upatch-hijacker kernel module + * upatch-helper kernel module * Copyright (C) 2024 Huawei Technologies Co., Ltd. * * This program is free software; you can redistribute it and/or modify @@ -18,8 +18,8 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#ifndef _UPATCH_HIJACKER_KO_LOG_H -#define _UPATCH_HIJACKER_KO_LOG_H +#ifndef _UPATCH_HELPER_KO_LOG_H +#define _UPATCH_HELPER_KO_LOG_H #include #include @@ -30,4 +30,4 @@ #define pr_fmt(fmt) "%s: " fmt, THIS_MODULE->name -#endif /* _UPATCH_HIJACKER_KO_LOG_H */ +#endif /* _UPATCH_HELPER_KO_LOG_H */ diff --git a/upatch-hijacker/ko/main.c b/upatch-helper/ko/main.c similarity index 86% rename from upatch-hijacker/ko/main.c rename to upatch-helper/ko/main.c index e14796e..52f0b86 100644 --- a/upatch-hijacker/ko/main.c +++ b/upatch-helper/ko/main.c @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0 /* - * upatch-hijacker kernel module + * upatch-helper kernel module * Copyright (C) 2024 Huawei Technologies Co., Ltd. * * This program is free software; you can redistribute it and/or modify @@ -26,7 +26,7 @@ #include "context.h" #include "ioctl.h" -static int __init upatch_hijacker_init(void) +static int __init upatch_helper_init(void) { int ret = 0; @@ -52,17 +52,17 @@ static int __init upatch_hijacker_init(void) return 0; } -static void __exit upatch_hijacker_exit(void) +static void __exit upatch_helper_exit(void) { ioctl_exit(); cache_exit(); context_exit(); } -module_init(upatch_hijacker_init); -module_exit(upatch_hijacker_exit); +module_init(upatch_helper_init); +module_exit(upatch_helper_exit); MODULE_AUTHOR("renoseven (dev@renoseven.net)"); -MODULE_DESCRIPTION("upatch compiler hijacker"); +MODULE_DESCRIPTION("upatch compiler helper"); MODULE_LICENSE("GPL"); MODULE_VERSION(BUILD_VERSION); diff --git a/upatch-hijacker/ko/map.c b/upatch-helper/ko/map.c similarity index 99% rename from upatch-hijacker/ko/map.c rename to upatch-helper/ko/map.c index 3049556..7771e8c 100644 --- a/upatch-hijacker/ko/map.c +++ b/upatch-helper/ko/map.c @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0 /* - * upatch-hijacker kernel module + * upatch-helper kernel module * Copyright (C) 2024 Huawei Technologies Co., Ltd. * * This program is free software; you can redistribute it and/or modify diff --git a/upatch-hijacker/ko/map.h b/upatch-helper/ko/map.h similarity index 90% rename from upatch-hijacker/ko/map.h rename to upatch-helper/ko/map.h index 37b522b..0e5a790 100644 --- a/upatch-hijacker/ko/map.h +++ b/upatch-helper/ko/map.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0 /* - * upatch-hijacker kernel module + * upatch-helper kernel module * Copyright (C) 2024 Huawei Technologies Co., Ltd. * * This program is free software; you can redistribute it and/or modify @@ -18,8 +18,8 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#ifndef _UPATCH_HIJACKER_KO_MAP_H -#define _UPATCH_HIJACKER_KO_MAP_H +#ifndef _UPATCH_HELPER_KO_MAP_H +#define _UPATCH_HELPER_KO_MAP_H #include @@ -40,4 +40,4 @@ void map_remove(struct map *map, const void *param); void *map_get(struct map *map, const void *param); size_t map_size(const struct map *map); -#endif /* _UPATCH_HIJACKER_KO_MAP_H */ +#endif /* _UPATCH_HELPER_KO_MAP_H */ diff --git a/upatch-hijacker/ko/records.c b/upatch-helper/ko/records.c similarity index 90% rename from upatch-hijacker/ko/records.c rename to upatch-helper/ko/records.c index ef1e3fd..079240d 100644 --- a/upatch-hijacker/ko/records.c +++ b/upatch-helper/ko/records.c @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0 /* - * upatch-hijacker kernel module + * upatch-helper kernel module * Copyright (C) 2024 Huawei Technologies Co., Ltd. * * This program is free software; you can redistribute it and/or modify @@ -76,10 +76,10 @@ void free_uprobe_record(struct uprobe_record *record) kfree(record); } -int create_hijacker_record(struct hijacker_record **record, +int create_helper_record(struct helper_record **record, const char *exec_path, const char *jump_path) { - struct hijacker_record *new_record = NULL; + struct helper_record *new_record = NULL; struct inode *exec_inode = NULL; struct inode *jump_inode = NULL; @@ -99,7 +99,7 @@ int create_hijacker_record(struct hijacker_record **record, return -ENOENT; } - new_record = kzalloc(sizeof(struct hijacker_record), GFP_KERNEL); + new_record = kzalloc(sizeof(struct helper_record), GFP_KERNEL); if (record == NULL) { return -ENOMEM; } @@ -113,7 +113,7 @@ int create_hijacker_record(struct hijacker_record **record, return 0; } -void free_hijacker_record(struct hijacker_record *record) +void free_helper_record(struct helper_record *record) { if (record == NULL) { return; @@ -124,7 +124,7 @@ void free_hijacker_record(struct hijacker_record *record) kfree(record); } -bool find_hijacker_record(const struct hijacker_record *record, +bool find_helper_record(const struct helper_record *record, const struct inode *inode) { return (inode_equal(record->exec_inode, inode) || diff --git a/upatch-hijacker/ko/records.h b/upatch-helper/ko/records.h similarity index 80% rename from upatch-hijacker/ko/records.h rename to upatch-helper/ko/records.h index 759ed5e..e9c8553 100644 --- a/upatch-hijacker/ko/records.h +++ b/upatch-helper/ko/records.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0 /* - * upatch-hijacker kernel module + * upatch-helper kernel module * Copyright (C) 2024 Huawei Technologies Co., Ltd. * * This program is free software; you can redistribute it and/or modify @@ -18,8 +18,8 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#ifndef _UPATCH_HIJACKER_KO_ENTITY_H -#define _UPATCH_HIJACKER_KO_ENTITY_H +#ifndef _UPATCH_HELPER_KO_ENTITY_H +#define _UPATCH_HELPER_KO_ENTITY_H #include #include @@ -36,7 +36,7 @@ struct uprobe_record { struct uprobe_consumer *uc; }; -struct hijacker_record { +struct helper_record { struct inode *exec_inode; struct inode *jump_inode; char exec_path[PATH_MAX]; @@ -47,10 +47,10 @@ int new_uprobe_record(struct uprobe_record **record, uprobe_handler handler, const char *path, loff_t offset); void free_uprobe_record(struct uprobe_record *record); -int create_hijacker_record(struct hijacker_record **record, +int create_helper_record(struct helper_record **record, const char *exec_path, const char *jump_path); -void free_hijacker_record(struct hijacker_record *record); -bool find_hijacker_record(const struct hijacker_record *record, +void free_helper_record(struct helper_record *record); +bool find_helper_record(const struct helper_record *record, const struct inode *inode); -#endif /* _UPATCH_HIJACKER_KO_ENTITY_H */ +#endif /* _UPATCH_HELPER_KO_ENTITY_H */ diff --git a/upatch-hijacker/ko/uprobe.c b/upatch-helper/ko/uprobe.c similarity index 89% rename from upatch-hijacker/ko/uprobe.c rename to upatch-helper/ko/uprobe.c index bc3c639..ab3513c 100644 --- a/upatch-hijacker/ko/uprobe.c +++ b/upatch-helper/ko/uprobe.c @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0 /* - * upatch-hijacker kernel module + * upatch-helper kernel module * Copyright (C) 2024 Huawei Technologies Co., Ltd. * * This program is free software; you can redistribute it and/or modify @@ -74,7 +74,7 @@ static inline const char __user *new_user_str(const char *src, size_t len) return (const char __user *)addr; } -static inline const char *select_jump_path(const struct hijacker_record *record, +static inline const char *select_jump_path(const struct helper_record *record, const struct inode *inode) { if (inode_equal(inode, record->exec_inode)) { @@ -92,8 +92,8 @@ int handle_uprobe(struct uprobe_consumer *self, struct pt_regs *regs) const char __user *argv0 = (const char __user *)_reg_argv0; const char __user *new_argv0 = NULL; - struct map *hijacker_map = get_hijacker_map(); - const struct hijacker_record *record = NULL; + struct map *helper_map = get_helper_map(); + const struct helper_record *record = NULL; const char *elf_path = NULL; const char *jump_path = NULL; @@ -102,11 +102,11 @@ int handle_uprobe(struct uprobe_consumer *self, struct pt_regs *regs) char *path_buff = NULL; size_t path_len = 0; - if ((argv0 == NULL) || (hijacker_context_count() == 0)) { + if ((argv0 == NULL) || (helper_context_count() == 0)) { return 0; } - if (map_size(hijacker_map) == 0) { + if (map_size(helper_map) == 0) { return 0; } @@ -129,7 +129,7 @@ int handle_uprobe(struct uprobe_consumer *self, struct pt_regs *regs) return 0; } - record = (const struct hijacker_record *)map_get(hijacker_map, inode); + record = (const struct helper_record *)map_get(helper_map, inode); if (record == NULL) { pr_debug("record not found, elf_path=%s\n", elf_path); path_buf_free(path_buff); @@ -143,7 +143,7 @@ int handle_uprobe(struct uprobe_consumer *self, struct pt_regs *regs) return 0; } path_len = strnlen(jump_path, PATH_MAX) + 1; - pr_debug("[hijacked] elf_path=%s, jump_path=%s\n", elf_path, jump_path); + pr_debug("[helped] elf_path=%s, jump_path=%s\n", elf_path, jump_path); new_argv0 = new_user_str(jump_path, path_len); if (new_argv0 == NULL) { diff --git a/upatch-hijacker/ko/uprobe.h b/upatch-helper/ko/uprobe.h similarity index 86% rename from upatch-hijacker/ko/uprobe.h rename to upatch-helper/ko/uprobe.h index 06564d5..39bc11d 100644 --- a/upatch-hijacker/ko/uprobe.h +++ b/upatch-helper/ko/uprobe.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0 /* - * upatch-hijacker kernel module + * upatch-helper kernel module * Copyright (C) 2024 Huawei Technologies Co., Ltd. * * This program is free software; you can redistribute it and/or modify @@ -18,8 +18,8 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#ifndef _UPATCH_HIJACKER_KO_UPROBE_H -#define _UPATCH_HIJACKER_KO_UPROBE_H +#ifndef _UPATCH_HELPER_KO_UPROBE_H +#define _UPATCH_HELPER_KO_UPROBE_H #include @@ -28,4 +28,4 @@ struct pt_regs; int handle_uprobe(struct uprobe_consumer *self, struct pt_regs *regs); -#endif /* _UPATCH_HIJACKER_KO_UPROBE_H */ +#endif /* _UPATCH_HELPER_KO_UPROBE_H */ diff --git a/upatch-hijacker/ko/utils.h b/upatch-helper/ko/utils.h similarity index 90% rename from upatch-hijacker/ko/utils.h rename to upatch-helper/ko/utils.h index 5e2f7ed..2add3e6 100644 --- a/upatch-hijacker/ko/utils.h +++ b/upatch-helper/ko/utils.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0 /* - * upatch-hijacker kernel module + * upatch-helper kernel module * Copyright (C) 2024 Huawei Technologies Co., Ltd. * * This program is free software; you can redistribute it and/or modify @@ -18,8 +18,8 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#ifndef _UPATCH_HIJACKER_KO_UTILS_H -#define _UPATCH_HIJACKER_KO_UTILS_H +#ifndef _UPATCH_HELPER_KO_UTILS_H +#define _UPATCH_HELPER_KO_UTILS_H #include #include @@ -47,4 +47,4 @@ static inline bool ns_equal(const struct pid_namespace *lhs, return (lhs->ns.inum == rhs->ns.inum); } -#endif /* _UPATCH_HIJACKER_KO_UTILS_H */ +#endif /* _UPATCH_HELPER_KO_UTILS_H */ diff --git a/upatch-hijacker/hijacker/CMakeLists.txt b/upatch-hijacker/hijacker/CMakeLists.txt deleted file mode 100644 index e42ffb3..0000000 --- a/upatch-hijacker/hijacker/CMakeLists.txt +++ /dev/null @@ -1,35 +0,0 @@ -# Build hijackers -add_executable(gnu-as-hijacker gnu-as-hijacker.c) -add_executable(gnu-compiler-hijacker gnu-compiler-hijacker.c) - -# Generate hijackers -add_custom_target(generate-upatch-hijackers ALL - COMMENT "Generating upatch hijackers..." - COMMAND ln -f gnu-as-hijacker as-hijacker - COMMAND ln -f gnu-compiler-hijacker gcc-hijacker - COMMAND ln -f gnu-compiler-hijacker g++-hijacker - COMMAND ln -f gnu-compiler-hijacker cc-hijacker - COMMAND ln -f gnu-compiler-hijacker c++-hijacker - DEPENDS - gnu-as-hijacker - gnu-compiler-hijacker - WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} -) - -# Install hijackers -install( - PROGRAMS - ${CMAKE_CURRENT_BINARY_DIR}/gnu-as-hijacker - ${CMAKE_CURRENT_BINARY_DIR}/gnu-compiler-hijacker - ${CMAKE_CURRENT_BINARY_DIR}/as-hijacker - ${CMAKE_CURRENT_BINARY_DIR}/gcc-hijacker - ${CMAKE_CURRENT_BINARY_DIR}/g++-hijacker - ${CMAKE_CURRENT_BINARY_DIR}/cc-hijacker - ${CMAKE_CURRENT_BINARY_DIR}/c++-hijacker - PERMISSIONS - OWNER_EXECUTE OWNER_WRITE OWNER_READ - GROUP_EXECUTE GROUP_READ - WORLD_READ WORLD_EXECUTE - DESTINATION - ${SYSCARE_LIBEXEC_DIR} -) diff --git a/upatch-hijacker/ko/CMakeLists.txt b/upatch-hijacker/ko/CMakeLists.txt deleted file mode 100644 index 9d3c67c..0000000 --- a/upatch-hijacker/ko/CMakeLists.txt +++ /dev/null @@ -1,32 +0,0 @@ -# Build upatch-hijacker kernel module - -# Set target -set(UPATCH_HIJACKER_KMOD "upatch_hijacker.ko") - -# Detect kernel source path -if (DEFINED KERNEL_VERSION) - set(KERNEL_SOURCE_PATH "/lib/modules/${KERNEL_VERSION}/build") - set(UPATCH_HIJACKER_KMOD_BUILD_CMD make module_version=${BUILD_VERSION} kernel=${KERNEL_SOURCE_PATH}) -else() - set(UPATCH_HIJACKER_KMOD_BUILD_CMD make module_version=${BUILD_VERSION}) -endif() - -# Build kernel module -add_custom_target(upatch-hijacker-kmod ALL - COMMENT "Building kernel module upatch-hijacker..." - BYPRODUCTS ${UPATCH_HIJACKER_KMOD} - COMMAND ${UPATCH_HIJACKER_KMOD_BUILD_CMD} - WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} -) - -# Install kernel module -install( - FILES - ${UPATCH_HIJACKER_KMOD} - PERMISSIONS - OWNER_WRITE OWNER_READ - GROUP_READ - WORLD_READ - DESTINATION - ${SYSCARE_LIBEXEC_DIR} -) diff --git a/upatch-manage/upatch-patch.c b/upatch-manage/upatch-patch.c index cbdbbe1..8a1ad41 100644 --- a/upatch-manage/upatch-patch.c +++ b/upatch-manage/upatch-patch.c @@ -730,7 +730,7 @@ int process_patch(int pid, struct upatch_elf *uelf, struct running_elf *relf, co goto out_free; } - // use uprobe to hack function. the program has been executed to the entry + // use uprobe to interpose function. the program has been executed to the entry // point /* @@ -850,7 +850,7 @@ int process_unpatch(int pid, const char *uuid) goto out_free; } - // use uprobe to hack function. the program has been executed to the entry + // use uprobe to interpose function. the program has been executed to the entry // point /* diff --git a/upatchd/src/config.rs b/upatchd/src/config.rs index 125770d..2ddb011 100644 --- a/upatchd/src/config.rs +++ b/upatchd/src/config.rs @@ -18,7 +18,7 @@ use anyhow::{anyhow, Result}; use serde::{Deserialize, Serialize}; use syscare_common::fs; -use crate::hijacker::HijackerConfig; +use crate::helper::UpatchHelperConfig; const DEFAULT_SOCKET_UID: u32 = 0; const DEFAULT_SOCKET_GID: u32 = 0; @@ -46,7 +46,7 @@ pub struct DaemonConfig { #[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)] pub struct Config { pub daemon: DaemonConfig, - pub hijacker: HijackerConfig, + pub helper: UpatchHelperConfig, } impl Config { diff --git a/upatchd/src/hijacker/config.rs b/upatchd/src/helper/config.rs similarity index 70% rename from upatchd/src/hijacker/config.rs rename to upatchd/src/helper/config.rs index 5f97fb1..e8eaefc 100644 --- a/upatchd/src/hijacker/config.rs +++ b/upatchd/src/helper/config.rs @@ -23,26 +23,26 @@ const GCC_BINARY: &str = "/usr/bin/gcc"; const GXX_BINARY: &str = "/usr/bin/g++"; const AS_BINARY: &str = "/usr/bin/as"; -const CC_HIJACKER: &str = "/usr/libexec/syscare/cc-hijacker"; -const CXX_HIJACKER: &str = "/usr/libexec/syscare/c++-hijacker"; -const GCC_HIJACKER: &str = "/usr/libexec/syscare/gcc-hijacker"; -const GXX_HIJACKER: &str = "/usr/libexec/syscare/g++-hijacker"; -const AS_HIJACKER: &str = "/usr/libexec/syscare/as-hijacker"; +const CC_HELPER: &str = "/usr/libexec/syscare/cc-helper"; +const CXX_HELPER: &str = "/usr/libexec/syscare/c++-helper"; +const GCC_HELPER: &str = "/usr/libexec/syscare/gcc-helper"; +const GXX_HELPER: &str = "/usr/libexec/syscare/g++-helper"; +const AS_HELPER: &str = "/usr/libexec/syscare/as-helper"; #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] -pub struct HijackerConfig { +pub struct UpatchHelperConfig { pub mapping: IndexMap, } -impl Default for HijackerConfig { +impl Default for UpatchHelperConfig { fn default() -> Self { Self { mapping: indexmap! { - PathBuf::from(CC_BINARY) => PathBuf::from(CC_HIJACKER), - PathBuf::from(CXX_BINARY) => PathBuf::from(CXX_HIJACKER), - PathBuf::from(GCC_BINARY) => PathBuf::from(GCC_HIJACKER), - PathBuf::from(GXX_BINARY) => PathBuf::from(GXX_HIJACKER), - PathBuf::from(AS_BINARY) => PathBuf::from(AS_HIJACKER), + PathBuf::from(CC_BINARY) => PathBuf::from(CC_HELPER), + PathBuf::from(CXX_BINARY) => PathBuf::from(CXX_HELPER), + PathBuf::from(GCC_BINARY) => PathBuf::from(GCC_HELPER), + PathBuf::from(GXX_BINARY) => PathBuf::from(GXX_HELPER), + PathBuf::from(AS_BINARY) => PathBuf::from(AS_HELPER), }, } } diff --git a/upatchd/src/hijacker/elf_resolver.rs b/upatchd/src/helper/elf_resolver.rs similarity index 100% rename from upatchd/src/hijacker/elf_resolver.rs rename to upatchd/src/helper/elf_resolver.rs diff --git a/upatchd/src/hijacker/ioctl.rs b/upatchd/src/helper/ioctl.rs similarity index 80% rename from upatchd/src/hijacker/ioctl.rs rename to upatchd/src/helper/ioctl.rs index b187979..0efbab4 100644 --- a/upatchd/src/hijacker/ioctl.rs +++ b/upatchd/src/helper/ioctl.rs @@ -21,20 +21,20 @@ use syscare_common::{ffi::OsStrExt, fs}; const KMOD_IOCTL_MAGIC: u16 = 0xE5; ioctl_write_ptr!( - ioctl_enable_hijacker, + ioctl_enable_hook, KMOD_IOCTL_MAGIC, 0x1, UpatchEnableRequest ); -ioctl_none!(ioctl_disable_hijacker, KMOD_IOCTL_MAGIC, 0x2); +ioctl_none!(ioctl_disable_hook, KMOD_IOCTL_MAGIC, 0x2); ioctl_write_ptr!( - ioctl_register_hijacker, + ioctl_register_hooker, KMOD_IOCTL_MAGIC, 0x3, UpatchRegisterRequest ); ioctl_write_ptr!( - ioctl_unregister_hijacker, + ioctl_unregister_hooker, KMOD_IOCTL_MAGIC, 0x4, UpatchRegisterRequest @@ -51,18 +51,18 @@ pub struct UpatchRegisterRequest { jump_path: [u8; PATH_MAX as usize], } -pub struct HijackerIoctl { +pub struct UpatchHelperIoctl { dev: File, } -impl HijackerIoctl { +impl UpatchHelperIoctl { pub fn new>(dev_path: P) -> Result { Ok(Self { dev: fs::open_file(dev_path)?, }) } - pub fn enable_hijacker>(&self, lib_path: P, offset: u64) -> Result<()> { + pub fn enable_hook>(&self, lib_path: P, offset: u64) -> Result<()> { let mut msg = UpatchEnableRequest { path: [0; PATH_MAX as usize], offset: 0, @@ -74,23 +74,23 @@ impl HijackerIoctl { msg.offset = offset; unsafe { - ioctl_enable_hijacker(self.dev.as_raw_fd(), &msg) + ioctl_enable_hook(self.dev.as_raw_fd(), &msg) .map_err(|e| anyhow!("Ioctl error, ret={}", e))? }; Ok(()) } - pub fn disable_hijacker(&self) -> Result<()> { + pub fn disable_hook(&self) -> Result<()> { unsafe { - ioctl_disable_hijacker(self.dev.as_raw_fd()) + ioctl_disable_hook(self.dev.as_raw_fd()) .map_err(|e| anyhow!("Ioctl error, ret={}", e))? }; Ok(()) } - pub fn register_hijacker(&self, exec_path: P, jump_path: Q) -> Result<()> + pub fn register_hooker(&self, exec_path: P, jump_path: Q) -> Result<()> where P: AsRef, Q: AsRef, @@ -108,14 +108,14 @@ impl HijackerIoctl { .write_all(jump_path.as_ref().to_cstring()?.to_bytes_with_nul())?; unsafe { - ioctl_register_hijacker(self.dev.as_raw_fd(), &msg) + ioctl_register_hooker(self.dev.as_raw_fd(), &msg) .map_err(|e| anyhow!("Ioctl error, {}", e.desc()))? }; Ok(()) } - pub fn unregister_hijacker(&self, exec_path: P, jump_path: Q) -> Result<()> + pub fn unregister_hooker(&self, exec_path: P, jump_path: Q) -> Result<()> where P: AsRef, Q: AsRef, @@ -133,7 +133,7 @@ impl HijackerIoctl { .write_all(jump_path.as_ref().to_cstring()?.to_bytes_with_nul())?; unsafe { - ioctl_unregister_hijacker(self.dev.as_raw_fd(), &msg) + ioctl_unregister_hooker(self.dev.as_raw_fd(), &msg) .map_err(|e| anyhow!("Ioctl error, {}", e.desc()))? }; diff --git a/upatchd/src/hijacker/kmod.rs b/upatchd/src/helper/kmod.rs similarity index 95% rename from upatchd/src/hijacker/kmod.rs rename to upatchd/src/helper/kmod.rs index fc89f5f..59b7ede 100644 --- a/upatchd/src/hijacker/kmod.rs +++ b/upatchd/src/helper/kmod.rs @@ -25,13 +25,13 @@ use syscare_common::{fs, os}; const KMOD_SYS_PATH: &str = "/sys/module"; /// An RAII guard of the kernel module. -pub struct HijackerKmodGuard { +pub struct UpatchHelperKmodGuard { kmod_name: String, kmod_path: PathBuf, sys_path: PathBuf, } -impl HijackerKmodGuard { +impl UpatchHelperKmodGuard { pub fn new, P: AsRef>(name: S, kmod_path: P) -> Result { let instance = Self { kmod_name: name.as_ref().to_string(), @@ -45,7 +45,7 @@ impl HijackerKmodGuard { } } -impl HijackerKmodGuard { +impl UpatchHelperKmodGuard { fn selinux_relabel_kmod(&self) -> Result<()> { const KMOD_SECURITY_TYPE: &str = "modules_object_t"; @@ -92,7 +92,7 @@ impl HijackerKmodGuard { } } -impl Drop for HijackerKmodGuard { +impl Drop for UpatchHelperKmodGuard { fn drop(&mut self) { if let Err(e) = self.remove_kmod() { error!("{:?}", e); diff --git a/upatchd/src/hijacker/mod.rs b/upatchd/src/helper/mod.rs similarity index 52% rename from upatchd/src/hijacker/mod.rs rename to upatchd/src/helper/mod.rs index d0f2c4d..85245d0 100644 --- a/upatchd/src/hijacker/mod.rs +++ b/upatchd/src/helper/mod.rs @@ -24,24 +24,24 @@ mod elf_resolver; mod ioctl; mod kmod; -pub use config::HijackerConfig; +pub use config::UpatchHelperConfig; use elf_resolver::ElfResolver; -use ioctl::HijackerIoctl; -use kmod::HijackerKmodGuard; +use ioctl::UpatchHelperIoctl; +use kmod::UpatchHelperKmodGuard; -const KMOD_NAME: &str = "upatch_hijacker"; -const KMOD_DEV_PATH: &str = "/dev/upatch-hijacker"; -const KMOD_PATH: &str = "/usr/libexec/syscare/upatch_hijacker.ko"; +const KMOD_NAME: &str = "upatch_helper"; +const KMOD_DEV_PATH: &str = "/dev/upatch-helper"; +const KMOD_PATH: &str = "/usr/libexec/syscare/upatch_helper.ko"; -const HIJACK_SYMBOL_NAME: &str = "execve"; +const TARGET_SYMBOL_NAME: &str = "execve"; -pub struct Hijacker { - config: HijackerConfig, - ioctl: HijackerIoctl, - _kmod: HijackerKmodGuard, // need to ensure this drops last +pub struct UpatchHelper { + config: UpatchHelperConfig, + ioctl: UpatchHelperIoctl, + _kmod: UpatchHelperKmodGuard, // need to ensure this drops last } -impl Hijacker { +impl UpatchHelper { fn find_symbol_addr(symbol_name: &str) -> Result<(PathBuf, u64)> { let exec_file = MappedFile::open(os::process::path())?; let exec_resolver = ElfResolver::new(exec_file.as_bytes())?; @@ -59,61 +59,66 @@ impl Hijacker { } } -impl Hijacker { - pub fn new(config: HijackerConfig) -> Result { - debug!("Initializing hijacker kernel module..."); - let kmod = HijackerKmodGuard::new(KMOD_NAME, KMOD_PATH)?; +impl UpatchHelper { + pub fn new(config: UpatchHelperConfig) -> Result { + debug!("Initializing upatch kernel module..."); + let kmod = UpatchHelperKmodGuard::new(KMOD_NAME, KMOD_PATH)?; - debug!("Initializing hijacker ioctl channel..."); - let ioctl = HijackerIoctl::new(KMOD_DEV_PATH)?; + debug!("Initializing upatch ioctl channel..."); + let ioctl = UpatchHelperIoctl::new(KMOD_DEV_PATH)?; - debug!("Initializing hijacker hooks..."); - let (lib_path, offset) = Self::find_symbol_addr(HIJACK_SYMBOL_NAME)?; + debug!("Initializing upatch hooks..."); + let (lib_path, offset) = Self::find_symbol_addr(TARGET_SYMBOL_NAME)?; info!( "Hooking library: {}, offset: {:#x}", lib_path.display(), offset ); - ioctl.enable_hijacker(lib_path, offset)?; + ioctl.enable_hook(lib_path, offset)?; Ok(Self { config, - _kmod: kmod, ioctl, + _kmod: kmod, }) } -} -impl Hijacker { - fn get_hijacker>(&self, exec_path: P) -> Result<&Path> { - let hijacker = self - .config - .mapping - .get(exec_path.as_ref()) - .with_context(|| format!("Cannot find hijacker for {}", exec_path.as_ref().display()))? - .as_path(); + pub fn register_hooker>(&self, elf_path: P) -> Result<()> { + let exec_path = elf_path.as_ref(); + let jump_path = self.jump_path(exec_path)?; - Ok(hijacker) + self.ioctl.register_hooker(exec_path, jump_path) } - pub fn register>(&self, elf_path: P) -> Result<()> { + pub fn unregister_hooker>(&self, elf_path: P) -> Result<()> { let exec_path = elf_path.as_ref(); - let jump_path = self.get_hijacker(exec_path)?; + let jump_path = self.jump_path(exec_path)?; - self.ioctl.register_hijacker(exec_path, jump_path) + self.ioctl.unregister_hooker(exec_path, jump_path) } +} - pub fn unregister>(&self, elf_path: P) -> Result<()> { - let exec_path = elf_path.as_ref(); - let jump_path = self.get_hijacker(exec_path)?; +impl UpatchHelper { + fn jump_path>(&self, exec_path: P) -> Result<&Path> { + let jump_path = self + .config + .mapping + .get(exec_path.as_ref()) + .with_context(|| { + format!( + "Cannot find hook program for {}", + exec_path.as_ref().display() + ) + })? + .as_path(); - self.ioctl.unregister_hijacker(exec_path, jump_path) + Ok(jump_path) } } -impl Drop for Hijacker { +impl Drop for UpatchHelper { fn drop(&mut self) { - if let Err(e) = self.ioctl.disable_hijacker() { + if let Err(e) = self.ioctl.disable_hook() { error!("{:?}", e); } } diff --git a/upatchd/src/main.rs b/upatchd/src/main.rs index 066e53e..8141679 100644 --- a/upatchd/src/main.rs +++ b/upatchd/src/main.rs @@ -30,7 +30,7 @@ use syscare_common::{fs, os}; mod args; mod config; -mod hijacker; +mod helper; mod rpc; use args::Arguments; @@ -175,7 +175,7 @@ impl Daemon { } fn initialize_skeleton(&self) -> Result { - let config = self.config.hijacker.clone(); + let config = self.config.helper.clone(); let methods = SkeletonImpl::new(config)?.to_delegate(); let mut io_handler = IoHandler::new(); diff --git a/upatchd/src/rpc/skeleton.rs b/upatchd/src/rpc/skeleton.rs index 9972fc1..a6891e1 100644 --- a/upatchd/src/rpc/skeleton.rs +++ b/upatchd/src/rpc/skeleton.rs @@ -18,9 +18,9 @@ use super::function::{rpc, RpcResult}; #[rpc(server)] pub trait Skeleton { - #[rpc(name = "enable_hijack")] - fn enable_hijack(&self, exec_path: PathBuf) -> RpcResult<()>; + #[rpc(name = "hook_compiler")] + fn hook_compiler(&self, exec_path: PathBuf) -> RpcResult<()>; - #[rpc(name = "disable_hijack")] - fn disable_hijack(&self, exec_path: PathBuf) -> RpcResult<()>; + #[rpc(name = "unhook_compiler")] + fn unhook_compiler(&self, exec_path: PathBuf) -> RpcResult<()>; } diff --git a/upatchd/src/rpc/skeleton_impl.rs b/upatchd/src/rpc/skeleton_impl.rs index d725166..c5085ae 100644 --- a/upatchd/src/rpc/skeleton_impl.rs +++ b/upatchd/src/rpc/skeleton_impl.rs @@ -17,7 +17,7 @@ use std::path::PathBuf; use anyhow::{Context, Result}; use log::{debug, info}; -use crate::hijacker::{Hijacker, HijackerConfig}; +use crate::helper::{UpatchHelper, UpatchHelperConfig}; use super::{ function::{RpcFunction, RpcResult}, @@ -25,34 +25,34 @@ use super::{ }; pub struct SkeletonImpl { - hijacker: Hijacker, + helper: UpatchHelper, } impl SkeletonImpl { - pub fn new(config: HijackerConfig) -> Result { - debug!("Initializing hijacker..."); + pub fn new(config: UpatchHelperConfig) -> Result { + debug!("Initializing upatch helper..."); Ok(Self { - hijacker: Hijacker::new(config).context("Failed to initialize hijacker")?, + helper: UpatchHelper::new(config).context("Failed to initialize upatch helper")?, }) } } impl Skeleton for SkeletonImpl { - fn enable_hijack(&self, elf_path: PathBuf) -> RpcResult<()> { + fn hook_compiler(&self, elf_path: PathBuf) -> RpcResult<()> { RpcFunction::call(|| { - info!("Enable hijack: {}", elf_path.display()); - self.hijacker - .register(&elf_path) - .with_context(|| format!("Failed to register hijack {}", elf_path.display())) + info!("Hook compiler: {}", elf_path.display()); + self.helper + .register_hooker(&elf_path) + .with_context(|| format!("Failed to hook helper {}", elf_path.display())) }) } - fn disable_hijack(&self, elf_path: PathBuf) -> RpcResult<()> { + fn unhook_compiler(&self, elf_path: PathBuf) -> RpcResult<()> { RpcFunction::call(|| { - info!("Disable hijack: {}", elf_path.display()); - self.hijacker - .unregister(&elf_path) - .with_context(|| format!("Failed to unregister hijack {}", elf_path.display())) + info!("Unhook compiler: {}", elf_path.display()); + self.helper + .unregister_hooker(&elf_path) + .with_context(|| format!("Failed to unhook compiler {}", elf_path.display())) }) } } -- 2.34.1