From 15be0a7082a7b532814b0e7dbe28b963236c9efa Mon Sep 17 00:00:00 2001 From: mittorn Date: Thu, 23 Aug 2018 22:39:24 +0000 Subject: [PATCH] User set_thread_area instead of modify_ldt --- loader/ldt_keeper.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/loader/ldt_keeper.c b/loader/ldt_keeper.c index c47342cd8..b0888e943 100644 --- a/loader/ldt_keeper.c +++ b/loader/ldt_keeper.c @@ -217,11 +217,17 @@ ldt_fs_t* Setup_LDT_Keeper(void) array.limit_in_pages=0; #ifdef __linux__ //ret=LDT_Modify(0x1, &array, sizeof(struct modify_ldt_ldt_s)); - ret=syscall(SYS_modify_ldt, 0x1, &array, sizeof(struct modify_ldt_ldt_s)); + ret = syscall(SYS_set_thread_area, &array); if(ret<0) { - perror("install_fs"); - printf("Couldn't install fs segment, expect segfault\n"); + perror("set_thread_area"); + ret = syscall(SYS_modify_ldt, 0x1, &array, sizeof(struct modify_ldt_ldt_s)); + if(ret<0) + { + perror("modify_ldt"); + printf("Couldn't install fs segment, expect segfault\n"); + return NULL; + } } #elif defined(__NetBSD__) || defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__DragonFly__) || defined(__APPLE__) {