X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Usermode%2FApplications%2Fbomb_src%2Fmain.c;h=b5cac3c57f8b7268aaf6dd745d1fd280ec20b938;hb=HEAD;hp=f9ecfa0b79adda5332af830a10cf09f463b1a824;hpb=7edeed66f89e03c3de5fb7d3b41421f23c1bc4f7;p=tpg%2Facess2.git diff --git a/Usermode/Applications/bomb_src/main.c b/Usermode/Applications/bomb_src/main.c index f9ecfa0b..b5cac3c5 100644 --- a/Usermode/Applications/bomb_src/main.c +++ b/Usermode/Applications/bomb_src/main.c @@ -24,7 +24,7 @@ int main(int argc, char *argv[]) return 1; } - switch( argv[i][0] ) + switch( argv[i][1] ) { case 'f': gbForkBomb = 1; @@ -43,11 +43,33 @@ int main(int argc, char *argv[]) if( gbForkBomb ) { - for(;;) clone(CLONE_VM, 0); + for(;;) _SysClone(CLONE_VM, 0); } else { - for(;;) clone(0, malloc(512-16)+512-16); + for(;;) + { + const int stackSize = 512-16; + const int stackOffset = 65; + char *stack = calloc(1, stackSize); + int tid; + if( !stack ) { + printf("Outta heap space!\n"); + return 0; + } + tid = _SysClone(0, stack+stackSize-stackOffset); + //_SysDebug("tid = %i", tid); + if( tid == 0 ) + { + // Sleep forever (TODO: Fix up the stack so it can nuke) + for(;;) _SysWaitEvent(THREAD_EVENT_SIGNAL); + } + if( tid < 0 ) { + printf("Clone failed\n"); + return 0; + } + } } + printf("RETURN!?\n"); return 0; }