X-Git-Url: https://glassweightruler.freedombox.rocks/gitweb/Ventoy.git/blobdiff_plain/879a7592bdd58d1788e952efde9895fc48a3484e..5bfddae81d440409e618f76d9ed26a896d840e6d:/VtoyTool/vtoykmod.c diff --git a/VtoyTool/vtoykmod.c b/VtoyTool/vtoykmod.c index 5ffd962..a1e2ea8 100644 --- a/VtoyTool/vtoykmod.c +++ b/VtoyTool/vtoykmod.c @@ -24,6 +24,9 @@ #include #include #include +#ifdef VTOY_X86_64 +#include +#endif #define _ull unsigned long long @@ -177,7 +180,8 @@ typedef struct ko_param unsigned long sym_put_addr; unsigned long sym_put_size; unsigned long kv_major; - unsigned long padding[2]; + unsigned long ibt; + unsigned long padding[1]; }ko_param; #pragma pack() @@ -486,6 +490,7 @@ int vtoykmod_fill_param(char **argv) param->reg_kprobe_addr = strtoul(argv[9], NULL, 16); param->unreg_kprobe_addr = strtoul(argv[10], NULL, 16); param->kv_major = (unsigned long)(argv[11][0] - '0'); + param->ibt = strtoul(argv[12], NULL, 16);; debug("pgsize=%lu (%s)\n", param->pgsize, argv[1]); debug("printk_addr=0x%lx (%s)\n", param->printk_addr, argv[2]); @@ -498,6 +503,7 @@ int vtoykmod_fill_param(char **argv) debug("reg_kprobe_addr=0x%lx (%s)\n", param->reg_kprobe_addr, argv[9]); debug("unreg_kprobe_addr=0x%lx (%s)\n", param->unreg_kprobe_addr, argv[10]); debug("kv_major=%lu (%s)\n", param->kv_major, argv[11]); + debug("ibt=0x%lx (%s)\n", param->ibt, argv[12]); break; } @@ -514,6 +520,26 @@ int vtoykmod_fill_param(char **argv) return 0; } +#ifdef VTOY_X86_64 +static int vtoykmod_check_ibt(void) +{ + uint32_t eax = 0, ebx = 0, ecx = 0, edx = 0; + + __cpuid_count(7, 0, eax, ebx, ecx, edx); + + if (edx & (1 << 20)) + { + return 0; + } + return 1; +} +#else +static int vtoykmod_check_ibt(void) +{ + return 1; +} +#endif + int vtoykmod_main(int argc, char **argv) { int i; @@ -535,6 +561,10 @@ int vtoykmod_main(int argc, char **argv) { return vtoykmod_update(argv[2], argv[3]); } + else if (argv[1][0] == '-' && argv[1][1] == 'I') + { + return vtoykmod_check_ibt(); + } return 0; }