From 1fb75bee90d769111573d6b6dd696b9cbd6d976a Mon Sep 17 00:00:00 2001 From: Lepton Wu Date: Fri, 25 Oct 2019 16:54:35 -0700 Subject: [PATCH] mapi: split entry_generate_or_patch for x86 tls The code works exactly the same with before. Just split this function out so we can reuse it. Reviewed-by: Matt Turner Signed-off-by: Lepton Wu --- src/mapi/entry_x86_tls.h | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/src/mapi/entry_x86_tls.h b/src/mapi/entry_x86_tls.h index 545b5a3c786..a4e2a766382 100644 --- a/src/mapi/entry_x86_tls.h +++ b/src/mapi/entry_x86_tls.h @@ -80,6 +80,9 @@ x86_current_tls(); extern char x86_entry_start[] HIDDEN; extern char x86_entry_end[] HIDDEN; +static inline mapi_func +entry_generate_or_patch(int, char *, size_t); + void entry_patch_public(void) { @@ -110,19 +113,21 @@ entry_patch(mapi_func entry, int slot) *((unsigned long *) (code + 8)) = slot * sizeof(mapi_func); } -mapi_func -entry_generate(int slot) +static inline mapi_func +entry_generate_or_patch(int slot, char *code, size_t size) { const char code_templ[16] = { 0x65, 0xa1, 0x00, 0x00, 0x00, 0x00, /* movl %gs:0x0, %eax */ 0xff, 0xa0, 0x34, 0x12, 0x00, 0x00, /* jmp *0x1234(%eax) */ 0x90, 0x90, 0x90, 0x90 /* nop's */ }; - char *code; mapi_func entry; - code = u_execmem_alloc(sizeof(code_templ)); - if (!code) + if (code == NULL) { + size = sizeof(code_templ); + code = u_execmem_alloc(size); + } + if (!code || size < sizeof(code_templ)) return NULL; memcpy(code, code_templ, sizeof(code_templ)); @@ -134,4 +139,10 @@ entry_generate(int slot) return entry; } +mapi_func +entry_generate(int slot) +{ + return entry_generate_or_patch(slot, NULL, 0); +} + #endif /* MAPI_MODE_BRIDGE */ -- 2.30.2