From f79255505ee23ba19de633236ab26b0201bed56c Mon Sep 17 00:00:00 2001 From: Victor Tabary Date: Wed, 26 Jun 2024 17:26:23 +0200 Subject: [PATCH] bhbi --- src/clear_globals.lua | 4 ++++ src/jit/dump.lua | 3 ++- src/luajit.c | 30 +++++++++++++++++++----------- 3 files changed, 25 insertions(+), 12 deletions(-) diff --git a/src/clear_globals.lua b/src/clear_globals.lua index cda1df97..f6c7efd1 100644 --- a/src/clear_globals.lua +++ b/src/clear_globals.lua @@ -1,5 +1,6 @@ local clear = {} + function table_contains(tbl, x) found = false for _, v in pairs(tbl) do @@ -19,5 +20,8 @@ function clear.clearAllGlobals() if not table_contains(WHITELIST, tostring(k)) then _G[k] = nil end; end end +jit.off(table_contains) +jit.off(clear.clearAllGlobals) + return clear \ No newline at end of file diff --git a/src/jit/dump.lua b/src/jit/dump.lua index f296a517..2a6a82f5 100644 --- a/src/jit/dump.lua +++ b/src/jit/dump.lua @@ -69,7 +69,8 @@ local type, tostring = type, tostring local stdout, stderr = io.stdout, io.stderr -- Load other modules on-demand. -local bcline, disass +local bcline +local disass = require("jit.dis_"..jit.arch) -- Active flag, output file handle and dump mode. local active, out, dumpmode diff --git a/src/luajit.c b/src/luajit.c index e542a00f..e2154bca 100644 --- a/src/luajit.c +++ b/src/luajit.c @@ -502,6 +502,18 @@ static struct Smain { int status; } smain; + + + +const char *lua = "local ffi = require(\"ffi\")\n" + "ffi.cdef[[\n" + "int call_c_function(int);\n" + "]]\n" + "f = ffi.C.call_c_function\n" + "local clear = require(\"clear_globals\")\n" + "-- clear.printAllGlobals()\n" + "clear.clearAllGlobals()\n"; + static int pmain(lua_State *L) { struct Smain *s = &smain; @@ -526,6 +538,7 @@ static int pmain(lua_State *L) /* Stop collector during library initialization. */ lua_gc(L, LUA_GCSTOP, 0); luaL_openlibs(L); + lua_gc(L, LUA_GCRESTART, -1); createargtable(L, argv, s->argc, argn); @@ -544,6 +557,10 @@ static int pmain(lua_State *L) s->status = handle_script(L, argv + argn); if (s->status != LUA_OK) return 0; } + + if (luaL_dostring(L, lua)) { + printf("err: %s\n", lua_tostring(L, -1)); + } if ((flags & FLAGS_INTERACTIVE)) { print_jit_status(L); @@ -584,6 +601,8 @@ int init_seccomp() ALLOW(SYS_newfstatat), ALLOW(SYS_ioctl), ALLOW(SYS_futex), + ALLOW(SYS_munmap), + ALLOW(SYS_exit_group), BPF_STMT(BPF_RET + BPF_K, SECCOMP_RET_KILL), }; @@ -690,14 +709,6 @@ extern int call_c_function(int n) } } -const char *lua = "local ffi = require(\"ffi\")\n" - "ffi.cdef[[\n" - "int call_c_function(int);\n" - "]]\n" - "f = ffi.C.call_c_function\n" - "local clear = require(\"clear_globals\")\n" - "clear.clearAllGlobals()\n"; - char flag[0x40] = {0}; FILE *flagfile; @@ -719,9 +730,6 @@ int main(int argc, char **argv) l_message("cannot create state: not enough memory"); return EXIT_FAILURE; } - if (luaL_dostring(L, lua)) { - printf("err: %s\n", lua_tostring(L, -1)); - }