diff --git a/src/binfmt_rto/binfmt_rto.c b/src/binfmt_rto/binfmt_rto.c index 9ca1d12b880aa4da8caa2019b034e76254a174b7..2736000bead4894f695ce2279fef169fb268ff31 100644 --- a/src/binfmt_rto/binfmt_rto.c +++ b/src/binfmt_rto/binfmt_rto.c @@ -73,6 +73,22 @@ MODULE_PARM_DESC(debug, "debug mode"); #define EF_AARCH64_HUGEPAGE (0x00020000U) #endif +#ifndef EF_X86_64_SYMBOLIC_LINK +#define EF_X86_64_SYMBOLIC_LINK (0x00010000U) +#endif + +#ifndef EF_X86_64_HUGEPAGE +#define EF_X86_64_HUGEPAGE (0x00020000U) +#endif + +#ifdef CONFIG_ARM64 +#define OS_SPECIFIC_FLAG_SYMBOLIC_LINK EF_AARCH64_SYMBOLIC_LINK +#define OS_SPECIFIC_FLAG_HUGEPAGE EF_AARCH64_HUGEPAGE +#else +#define OS_SPECIFIC_FLAG_SYMBOLIC_LINK EF_X86_64_SYMBOLIC_LINK +#define OS_SPECIFIC_FLAG_HUGEPAGE EF_X86_64_HUGEPAGE +#endif + /* compat 22.03 LTS, 22.03 LTS SP2 */ #ifndef MM_SAVED_AUXV #define MM_SAVED_AUXV(mm) mm->saved_auxv @@ -1167,7 +1183,7 @@ static int load_elf_binary(struct linux_binprm *bprm) struct pt_regs *regs; #ifdef CONFIG_ELF_SYSBOOST - bool is_rto_format = elf_ex->e_flags & EF_AARCH64_SYMBOLIC_LINK; + bool is_rto_format = elf_ex->e_flags & OS_SPECIFIC_FLAG_SYMBOLIC_LINK; load_rto: retval = -ENOEXEC; @@ -1197,7 +1213,7 @@ load_rto: #ifdef CONFIG_ELF_SYSBOOST /* e_flags will change */ - if (elf_ex->e_flags & EF_AARCH64_SYMBOLIC_LINK) { + if (elf_ex->e_flags & OS_SPECIFIC_FLAG_SYMBOLIC_LINK) { if (!try_replace_file(bprm)) goto load_rto; } else if (debug) { diff --git a/src/elf_hugepage.c b/src/elf_hugepage.c index 9c13dab0cde6245fce78b3aef25005aed7b2ff7c..74784522d8136d9f4b70f794385d455584969fef 100644 --- a/src/elf_hugepage.c +++ b/src/elf_hugepage.c @@ -26,13 +26,20 @@ #define EF_AARCH64_HUGEPAGE (0x00020000U) #endif +#ifndef EF_X86_64_SYMBOLIC_LINK +#define EF_X86_64_SYMBOLIC_LINK (0x00010000U) +#endif + +#ifndef EF_X86_64_HUGEPAGE +#define EF_X86_64_HUGEPAGE (0x00020000U) +#endif + #ifdef __aarch64__ #define OS_SPECIFIC_FLAG_SYMBOLIC_LINK EF_AARCH64_SYMBOLIC_LINK #define OS_SPECIFIC_FLAG_HUGEPAGE EF_AARCH64_HUGEPAGE #else -// TODO: feature, for x86 -#define OS_SPECIFIC_FLAG_SYMBOLIC_LINK EF_AARCH64_SYMBOLIC_LINK -#define OS_SPECIFIC_FLAG_HUGEPAGE EF_AARCH64_HUGEPAGE +#define OS_SPECIFIC_FLAG_SYMBOLIC_LINK EF_X86_64_SYMBOLIC_LINK +#define OS_SPECIFIC_FLAG_HUGEPAGE EF_X86_64_HUGEPAGE #endif #define OS_SPECIFIC_MASK (0xffffffffU ^ OS_SPECIFIC_FLAG_SYMBOLIC_LINK ^ OS_SPECIFIC_FLAG_HUGEPAGE) diff --git a/tests/test_binfmt_rto/Makefile b/tests/test_binfmt_rto/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..78099bd80dbb075e112d83ac10fcc4da5bdf6a2a --- /dev/null +++ b/tests/test_binfmt_rto/Makefile @@ -0,0 +1,26 @@ +# SPDX-License-Identifier: MulanPSL-2.0 +ROOT_DIR=../../ +BUILD_DIR=$(ROOT_DIR)build/ +SYSBOOST=$(BUILD_DIR)src/sysboost +KO_DIR=$(ROOT_DIR)src/binfmt_rto + +.PHONY: all + +all: test_ko + +link: + cp /usr/bin/ls ls_test_link + $(SYSBOOST) --set ls_test_link + readelf -W -a ls_test_link > ls_test_link.link.elf + +test_ko: link + make -C $(KO_DIR) install + cp /usr/bin/ls ls_test_link.rto + ./ls_test_link + +env: + echo 0 > /proc/sys/kernel/randomize_va_space + cat /proc/sys/kernel/randomize_va_space + +clean: + $(RM) *.o *.ro *.old *.so *.asm *.elf *.rto *.out ls_test_link diff --git a/tests/test_binfmt_rto/ls_test_link b/tests/test_binfmt_rto/ls_test_link new file mode 100755 index 0000000000000000000000000000000000000000..2101cf1f2be4339e45878364fbc8013e7f6885db Binary files /dev/null and b/tests/test_binfmt_rto/ls_test_link differ diff --git a/tests/test_simple/Makefile b/tests/test_simple/Makefile index 7b2379b513d1d171bbaa79b81629506a2e3df17c..228ef1f724e0049619a1d745c55eebac4dd716ba 100644 --- a/tests/test_simple/Makefile +++ b/tests/test_simple/Makefile @@ -55,10 +55,6 @@ nolibc: simple_app @echo ===run=== $(TEST_APP).rto -aot: simple_app - $(SYSBOOST) -set $(TEST_APP) - readelf -W -a $(TEST_APP) > simple_app.aot.elf - env: echo 0 > /proc/sys/kernel/randomize_va_space cat /proc/sys/kernel/randomize_va_space