Trying to reduce the ability for a fork bomb to fault the kernel
authorJohn Hodge <[email protected]>
Tue, 24 Aug 2010 02:24:47 +0000 (10:24 +0800)
committerJohn Hodge <[email protected]>
Tue, 24 Aug 2010 02:24:47 +0000 (10:24 +0800)
- Darn, there's still a requirement for proc.asm to know the structure
  of tThread

Kernel/arch/x86/mm_virt.c
Kernel/arch/x86/proc.asm
Kernel/arch/x86/proc.c
Kernel/threads.c
Usermode/Applications/bomb_src/main.c
Usermode/Applications/init_src/Makefile
Usermode/Applications/init_src/main.c
Usermode/Libraries/libc.so_src/string.c

index dce4782..fdc19b1 100644 (file)
@@ -653,14 +653,15 @@ tPAddr MM_Clone(void)
  */
 tVAddr MM_NewKStack(void)
 {
-       tVAddr  base = KERNEL_STACKS;
+       tVAddr  base;
        Uint    i;
-       for(;base<KERNEL_STACKS_END;base+=KERNEL_STACK_SIZE)
+       for(base = KERNEL_STACKS; base < KERNEL_STACKS_END; base += KERNEL_STACK_SIZE)
        {
                if(MM_GetPhysAddr(base) != 0)   continue;
-               for(i=0;i<KERNEL_STACK_SIZE;i+=0x1000) {
+               for(i = 0; i < KERNEL_STACK_SIZE; i += 0x1000) {
                        MM_Allocate(base+i);
                }
+               Log("MM_NewKStack - Allocated %p", base + KERNEL_STACK_SIZE);
                return base+KERNEL_STACK_SIZE;
        }
        Warning("MM_NewKStack - No address space left\n");
index e0598a5..732d35f 100644 (file)
@@ -165,7 +165,7 @@ Proc_ReturnToUser:
        
        ; EAX is the current thread
        mov ebx, eax
-       mov eax, [ebx+40]       ; Get Kernel Stack
+       mov eax, [ebx+12*4]     ; Get Kernel Stack
        sub eax, KSTACK_USERSTATE_SIZE
        
        ;
index bfd0e8f..7596212 100644 (file)
@@ -570,7 +570,11 @@ int Proc_Clone(Uint *Err, Uint Flags)
                Uint    tmpEbp, oldEsp = esp;
 
                // Set CR3
+               #if USE_PAE
+               # warning "PAE Unimplemented"
+               #else
                newThread->MemState.CR3 = cur->MemState.CR3;
+               #endif
 
                // Create new KStack
                newThread->KernelStack = MM_NewKStack();
@@ -606,7 +610,7 @@ int Proc_Clone(Uint *Err, Uint Flags)
                __asm__ __volatile__ ("mov %0, %%db0" : : "r" (newThread) );
                #if USE_MP
                // ACK the interrupt
-               if(GetCPUNum())
+               if( GetCPUNum() )
                        gpMP_LocalAPIC->EOI.Val = 0;
                else
                #endif
index 5d8e401..610f7b5 100644 (file)
@@ -928,7 +928,7 @@ void Mutex_Release(tMutex *Mutex)
                // Wake new owner
                Mutex->Owner->Status = THREAD_STAT_ACTIVE;
                Threads_AddActive(Mutex->Owner);
-               Log("Mutex %p Woke %p", Mutex, Mutex->Owner);
+               //Log("Mutex %p Woke %p", Mutex, Mutex->Owner);
        }
        else {
                Mutex->Owner = NULL;
@@ -947,3 +947,6 @@ int Mutex_IsLocked(tMutex *Mutex)
 
 // === EXPORTS ===
 EXPORT(Threads_GetUID);
+EXPORT(Mutex_Acquire);
+EXPORT(Mutex_Release);
+EXPORT(Mutex_IsLocked);
index f9ecfa0..d792322 100644 (file)
@@ -24,7 +24,7 @@ int main(int argc, char *argv[])
                        return 1;
                }
                
-               switch( argv[i][0] )
+               switch( argv[i][1] )
                {
                case 'f':
                        gbForkBomb = 1;
index 641503d..94aebd1 100644 (file)
@@ -4,7 +4,8 @@
 
 CPPFLAGS += 
 CFLAGS  += -Wall -Werror -O3
-LDFLAGS  += -lspiderscript
+LDFLAGS  +=
+# -lspiderscript
 
 BIN = ../init
 OBJ = main.o
index eb2e931..a88af9f 100644 (file)
@@ -4,7 +4,7 @@
 #include <acess/sys.h>
 #include <stdlib.h>
 #include <stdio.h>
-#include <spiderscript.h>
+//#include <spiderscript.h>
 //#include "common.h"
 
 // === CONSTANTS ===
 #define ARRAY_SIZE(x)  ((sizeof(x))/(sizeof((x)[0])))
 
 // === PROTOTYPES ===
+/*
 tSpiderVariable        *Script_System_IO_Open(tSpiderScript *, int, tSpiderVariable *);
+*/
 
 // === GLOBALS ===
+/*
 tSpiderFunction        gaScriptNS_IO_Fcns[] = {
        {"Open", Script_System_IO_Open}
 };
@@ -45,6 +48,7 @@ tSpiderVariant        gScriptVariant = {
        "init", 0,
        ARRAY_SIZE(gaScriptNamespaces), gaScriptNamespaces
 };
+*/
 
 // === CODE ===
 /**
@@ -88,16 +92,20 @@ int main(int argc, char *argv[])
  */
 void ExecuteScript(const char *Filename)
 {
+       /*
        tSpiderScript   *script;
        script = SpiderScript_ParseFile(&gScriptVariant, Filename);
        SpiderScript_ExecuteMethod(script, "");
        SpiderScript_Free(script);
+       */
 }
 
 /**
  * \brief Open a file
  */
+/*
 tSpiderVariable        *Script_System_IO_Open(tSpiderScript *Script, int NArgs, tSpiderVariable *Args)
 {
        return NULL;
 }
+*/
index 4e8dfe2..eaddd18 100644 (file)
@@ -88,18 +88,6 @@ EXPORT int strlen(const char *str)
        return retval;
 }
 
-/**
- * \fn EXPORT int strncmp(const char *s1, const char *s2, size_t len)
- * \brief Compare two strings with a limit
- */
-EXPORT int strncmp(const char *s1, const char *s2, size_t len)
-{
-       while(--len && *s1 == *s2 && *s1 != '\0' && *s2 != '\0') {
-               s1++; s2++;
-       }
-       return (int)*s1 - (int)*s2;
-}
-
 /**
  * \fn EXPORT char *strdup(const char *str)
  * \brief Duplicate a string using heap memory

UCC git Repository :: git.ucc.asn.au