diff options
author | jdike <jdike> | 2003-06-05 19:55:45 +0000 |
---|---|---|
committer | jdike <jdike> | 2003-06-05 19:55:45 +0000 |
commit | 1b08e75ff6316541b38d4c9c70a4e23ca2204af9 (patch) | |
tree | 28534b05f81fe55ee8422a4eb3c0faee8e70a66e | |
parent | 5fd39ef3afbc36c89d3c18b48847f9ad8ecf3e3f (diff) | |
download | uml-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.c | 1 | ||||
-rw-r--r-- | arch/um/sys-i386/bugs.c | 19 |
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; |