From 7bb4e1335435397243c9b63a64a5c61c82691357 Mon Sep 17 00:00:00 2001 From: Sylvain Gault Date: Mon, 12 Oct 2015 05:03:26 +0200 Subject: ldlinux: fix stack overflow when running COM32 modules When a COM32 module exits, the functions never return and a new call to ldlinux_enter_command is made. This could fill the stack and overflow on some data present in memory. This patch use setjmp/longjmp to return to the main function and restart from there when a COM32 module exits. Signed-off-by: Sylvain Gault --- com32/elflink/ldlinux/execute.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'com32/elflink/ldlinux/execute.c') diff --git a/com32/elflink/ldlinux/execute.c b/com32/elflink/ldlinux/execute.c index 653c880d..39555715 100644 --- a/com32/elflink/ldlinux/execute.c +++ b/com32/elflink/ldlinux/execute.c @@ -44,6 +44,7 @@ const struct image_types image_boot_types[] = { { NULL, 0 }, }; +extern jmp_buf __return_to_command_prompt; extern int create_args_and_load(char *); __export void execute(const char *cmdline, uint32_t type, bool sysappend) @@ -136,7 +137,8 @@ __export void execute(const char *cmdline, uint32_t type, bool sysappend) /* Restore the console */ ldlinux_console_init(); - ldlinux_enter_command(); + /* Jump back to the main to call ldlinux_enter_command */ + longjmp(__return_to_command_prompt, 1); } else if (type == IMAGE_TYPE_CONFIG) { char *argv[] = { LDLINUX, NULL, NULL }; char *config; -- cgit v1.2.1