summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjdike <jdike>2003-06-05 19:55:45 +0000
committerjdike <jdike>2003-06-05 19:55:45 +0000
commit1b08e75ff6316541b38d4c9c70a4e23ca2204af9 (patch)
tree28534b05f81fe55ee8422a4eb3c0faee8e70a66e
parent5fd39ef3afbc36c89d3c18b48847f9ad8ecf3e3f (diff)
downloaduml-history-1b08e75ff6316541b38d4c9c70a4e23ca2204af9.tar.gz
Implemented a first pass of lcall system call prevention.v_2_4_20_6
-rw-r--r--arch/um/kernel/tt/process_kern.c1
-rw-r--r--arch/um/sys-i386/bugs.c19
2 files changed, 20 insertions, 0 deletions
diff --git a/arch/um/kernel/tt/process_kern.c b/arch/um/kernel/tt/process_kern.c
index f858fb8..4cb1406 100644
--- a/arch/um/kernel/tt/process_kern.c
+++ b/arch/um/kernel/tt/process_kern.c
@@ -182,6 +182,7 @@ static void finish_fork_handler(int sig)
int fork_tramp(void *stack)
{
cli();
+ arch_init_thread();
init_new_thread_stack(stack, finish_fork_handler);
os_usr1_process(os_getpid());
return(0);
diff --git a/arch/um/sys-i386/bugs.c b/arch/um/sys-i386/bugs.c
index 15d0c9f..63d9dbc 100644
--- a/arch/um/sys-i386/bugs.c
+++ b/arch/um/sys-i386/bugs.c
@@ -105,6 +105,25 @@ static int check_cpu_feature(char *feature, int *have_it)
return(1);
}
+static void disable_lcall(void)
+{
+ struct modify_ldt_ldt_s ldt;
+ int err;
+
+ bzero(&ldt, sizeof(ldt));
+ ldt.entry_number = 7;
+ ldt.base_addr = 0;
+ ldt.limit = 0;
+ err = modify_ldt(1, &ldt, sizeof(ldt));
+ if(err)
+ printk("Failed to disable lcall7 - errno = %d\n", errno);
+}
+
+void arch_init_thread(void)
+{
+ disable_lcall();
+}
+
void arch_check_bugs(void)
{
int have_it;