shithub: fuzz

Download patch

ref: 1789e9f170e4c3cb5e5b26c01fff55f086d4db73
parent: 315ec1231370a4c8a668e2f462f6fda478d869bf
parent: b5b783c10861686d2084a94eec46066ccde252e7
author: seh <seh@localhost>
date: Mon Nov 19 16:40:07 EST 2018

merge anthony changes

--- a/fuzz.h
+++ b/fuzz.h
@@ -13,7 +13,7 @@
 // Global variables
 extern int logfd;
 
-/* 
+/*
 For full list of syscalls:
 
 If systab doesn't exist, do: cd /sys/src/9/port && mk
@@ -25,7 +25,6 @@
 // User space syscall definitions as per libc.h with sc_ prefix added
 typedef int call;
 enum call {
-sc_exits	,	//	_exits(char*);
 sc_abort	,	//	abort(void);
 sc_access	,	//	access(char*, int);
 sc_alarm	,	//	alarm(ulong);
@@ -39,6 +38,7 @@
 sc_errstr	,	//	errstr(char*, uint);
 sc_exec	,		//	exec(char*, char*[]);
 sc_execl	,	//	execl(char*, ...);
+sc_exits	,	//	_exits(char*);
 sc_fork	,		//	fork(void);
 sc_rfork	,	//	rfork(int);
 sc_fauth	,	//	fauth(int, char*);
@@ -96,19 +96,23 @@
 // Enum to track types of inputs
 typedef int type;
 enum type {
-t_int,
-t_uint,
-t_IOchunkS,
-t_long,
-t_ulong,
-t_vlong,
-t_longS,
-t_DirS,
-t_DirSS,
-t_char,
-t_uchar,
-t_charS,
-t_charSArr
+t_int,          // int
+t_intS,         // int pointer
+t_uint,         // unsigned int
+t_IOchunkS,     // IOChunkS pointer
+t_long,         // long
+t_longS,        // long pointer
+t_ulong,        // unsigned long
+t_vlong,        // long long
+t_DirS,         // directory pointer
+t_DirSS,        // director pointer to string of chars
+t_char,         // char
+t_uchar,        // unsigned char
+t_ucharS,       // unsigned char pointer
+t_charS,        // string
+t_charSArr,     // char pointer array
+t_void,         // void type
+t_voidS         // void pointer type
 };
 
 // Structure to track an instance of a given type
--- a/inlist.c
+++ b/inlist.c
@@ -3,221 +3,435 @@
 // HERE BE DRAGONS -- this should be moved to a generator
 // Generate the input list for the given syscall
 
+void mk_int(List *l)
+{
+    t_type *tt = malloc(sizeof(t_type));
+    tt->var = malloc(sizeof(int));
+    *(int *)tt->var = 0;
+    tt->t = t_int;
+
+    ladd(l, tt);
+}
+
+void mk_intS(List *l)
+{
+    t_type *tt = malloc(sizeof(t_type));
+    tt->var = nil;
+    tt->t = t_intS;
+
+    ladd(l, tt);
+}
+
+void mk_uint(List *l)
+{
+    t_type *tt = malloc(sizeof(t_type));
+    tt->var = malloc(sizeof(unsigned int));
+    *(unsigned int *)tt->var = 0;
+    tt->t = t_uint;
+
+    ladd(l, tt);
+}
+
+void mk_IOchunkS(List *l)
+{
+    t_type *tt = malloc(sizeof(t_type));
+    tt->var = nil;
+    tt->t = t_IOchunkS;
+
+    ladd(l, tt);
+}
+
+void mk_long(List *l)
+{
+    t_type *tt = malloc(sizeof(t_type));
+    tt->var = malloc(sizeof(long));
+    *(long *)tt->var = 0;
+    tt->t = t_long;
+
+    ladd(l, tt);
+}
+
+void mk_longS(List *l)
+{
+    t_type *tt = malloc(sizeof(t_type));
+    tt->var = nil;
+    tt->t = t_longS;
+
+    ladd(l, tt);
+}
+
+void mk_ulong(List *l)
+{
+    t_type *tt = malloc(sizeof(t_type));
+    tt->var = malloc(sizeof(unsigned long));
+    *(unsigned long *)tt->var = 0;
+    tt->t = t_ulong;
+
+    ladd(l, tt);
+}
+
+void mk_vlong(List *l)
+{
+    t_type *tt = malloc(sizeof(t_type));
+    tt->var = malloc(sizeof(long long));
+    *(long long *)tt->var = 0;
+    tt->t = t_vlong;
+
+    ladd(l, tt);
+}
+
+void mk_DirS(List *l)
+{
+    t_type *tt = malloc(sizeof(t_type));
+    tt->var = nil;
+    tt->t = t_DirS;
+
+    ladd(l, tt);
+}
+
+void mk_DirSS(List *l)
+{
+    t_type *tt = malloc(sizeof(t_type));
+    tt->var = nil;
+    tt->t = t_DirSS;
+
+    ladd(l, tt);
+}
+
+void mk_char(List *l)
+{
+    t_type *tt = malloc(sizeof(t_type));
+    tt->var = malloc(sizeof(char));
+    *(char *)tt->var = '\n';
+    tt->t = t_char;
+
+    ladd(l, tt);
+}
+
+void mk_uchar(List *l)
+{
+    t_type *tt = malloc(sizeof(t_type));
+    tt->var = malloc(sizeof(unsigned char));
+    *(unsigned char *)tt->var = '\n';
+    tt->t = t_uchar;
+
+    ladd(l, tt);
+}
+
+void mk_ucharS(List *l)
+{
+    t_type *tt = malloc(sizeof(t_type));
+    tt->var = nil;
+    tt->t = t_ucharS;
+
+    ladd(l, tt);
+}
+
+void mk_charS(List *l)
+{
+    t_type *tt = malloc(sizeof(t_type));
+    tt->var = nil;
+    tt->t = t_charS;
+
+    ladd(l, tt);
+}
+
+void mk_void(List *l)
+{
+    t_type *tt = malloc(sizeof(t_type));
+    tt->var = nil;
+    tt->t = t_void;
+
+    ladd(l, tt);
+}
+
+void mk_voidS(List *l)
+{
+    t_type *tt = malloc(sizeof(t_type));
+    tt->var = nil;
+    tt->t = t_voidS;
+
+    ladd(l, tt);
+}
+
 List*
 mkinlist(List* l, call c)
 {
 	// Iterate through l
-	
-	switch(c){
-	// pls fix -- try removing the print
-	case sc_exits: ;
-		t_type *t = malloc(1 * sizeof(t_type));
-		t->var = nil;
-		t->t = sc_exits;
-		
-		// Add to type list -- in order
-		ladd(l, t);
 
-		break;
+	switch(c){
 	case sc_abort:
-
+        mk_void(l);
 		break;
 	case sc_access:
-
+        mk_charS(l);
+        mk_int(l);
 		break;
 	case sc_alarm:
-
+        mk_ulong(l);
 		break;
 	case sc_await:
-
+        mk_charS(l);
+        mk_int(l);
 		break;
-	case sc_bind	:
-
+    case sc_bind:
+        mk_charS(l);
+        mk_charS(l);
+        mk_int(l);
+        break;
+	case sc_brk:
+        mk_voidS(l);
 		break;
-	case sc_brk	:
-
+	case sc_chdir:
+		mk_charS(l);
 		break;
-	case sc_chdir	:
-
+	case sc_close:
+        mk_int(l);
 		break;
-	case sc_close	:
-
+	case sc_create:
+        mk_charS(l);
+        mk_int(l);
+        mk_ulong(l);
 		break;
-	case sc_create	:
-
+	case sc_dup:
+        mk_int(l);
+        mk_int(l);
 		break;
-	case sc_dup	:
-
+	case sc_errstr:
+        mk_charS(l);
+        mk_uint(l);
 		break;
-	case sc_errstr	:
+	case sc_exec:
 
-		break;
-	case sc_exec	:
+        // wtf?
 
 		break;
-	case sc_execl	:
-
+	case sc_execl:
+        mk_charS(l);
 		break;
-	case sc_fork	:
-
+	case sc_exits:
+        mk_charS(l);
+	    break;
+    case sc_fork:
+        mk_void(l);
 		break;
-	case sc_rfork	:
-
+	case sc_rfork:
+        mk_int(l);
 		break;
-	case sc_fauth	:
-
+	case sc_fauth:
+        mk_int(l);
+        mk_charS(l);
 		break;
-	case sc_fstat	:
-
+	case sc_fstat:
+        mk_int(l);
+        mk_ucharS(l);
+        mk_int(l);
 		break;
-	case sc_fwstat	:
-
+	case sc_fwstat:
+        mk_int(l);
+        mk_ucharS(l);
+        mk_int(l);
 		break;
 	case sc_fversion:
-
+        mk_int(l);
+        mk_int(l);
+        mk_charS(l);
+        mk_int(l);
 		break;
-	case sc_mount	:
-
+	case sc_mount:
+        mk_int(l);
+        mk_int(l);
+        mk_charS(l);
+        mk_int(l);
+        mk_charS(l);
 		break;
 	case sc_unmount:
-
+        mk_charS(l);
+        mk_charS(l);
 		break;
-	case sc_noted	:
-
+	case sc_noted:
+        mk_int(l);
 		break;
-	case sc_notify	:
+	case sc_notify:
 
-		break;
-	case sc_open	:
+        // wtf?
 
 		break;
+	case sc_open:
+        mk_charS(l);
+        mk_int(l);
+		break;
 	case sc_fd2path:
-
+        mk_int(l);
+        mk_charS(l);
+        mk_int(l);
 		break;
-	case sc_pipe	:
-
+	case sc_pipe:
+        mk_intS(l);
 		break;
-	case sc_pread	:
-
+	case sc_pread:
+        mk_int(l);
+        mk_voidS(l);
+        mk_long(l);
+        mk_vlong(l);
 		break;
 	case sc_preadv:
-
+        mk_int(l);
+        mk_IOchunkS(l);
+        mk_int(l);
+        mk_vlong(l);
 		break;
-	case sc_pwrite	:
-
+	case sc_pwrite:
+        mk_int(l);
+        mk_voidS(l);
+        mk_long(l);
+        mk_vlong(l);
 		break;
 	case sc_pwritev:
-
+        mk_int(l);
+        mk_IOchunkS(l);
+        mk_int(l);
+        mk_vlong(l);
 		break;
-	case sc_read	:
-
+	case sc_read:
+        mk_int(l);
+        mk_voidS(l);
+        mk_long(l);
 		break;
-	case sc_readn	:
-
+	case sc_readn:
+        mk_int(l);
+        mk_voidS(l);
+        mk_long(l);
 		break;
-	case sc_readv	:
-
+	case sc_readv:
+        mk_int(l);
+        mk_IOchunkS(l);
+        mk_int(l);
 		break;
 	case sc_remove:
-
+        mk_charS(l);
 		break;
-	case sc_sbrk	:
-
+	case sc_sbrk:
+        mk_ulong(l);
 		break;
-	case sc_oseek	:
-
+	case sc_oseek:
+        mk_int(l);
+        mk_long(l);
+        mk_int(l);
 		break;
 	case sc_seek:
-
+        mk_int(l);
+        mk_vlong(l);
+        mk_int(l);
 		break;
 	case sc_segattach:
-
+        mk_int(l);
+        mk_charS(l);
+        mk_voidS(l);
+        mk_ulong(l);
 		break;
-	case sc_segbrk	:
-
+	case sc_segbrk:
+        mk_voidS(l);
+        mk_voidS(l);
 		break;
 	case sc_segdetach:
-
+        mk_voidS(l);
 		break;
 	case sc_segflush:
-
+        mk_voidS(l);
+        mk_ulong(l);
 		break;
 	case sc_segfree:
-
+        mk_voidS(l);
+        mk_ulong(l);
 		break;
 	case sc_semacquire:
-
+        mk_longS(l);
+        mk_int(l);
 		break;
 	case sc_semrelease:
-
+        mk_longS(l);
+        mk_long(l);
 		break;
 	case sc_sleep:
-
+        mk_long(l);
 		break;
 	case sc_stat:
-
+        mk_charS(l);
+        mk_ucharS(l);
+        mk_int(l);
 		break;
 	case sc_tsemacquire:
-
+        mk_longS(l);
+        mk_ulong(l);
 		break;
 	case sc_wait:
-
+        mk_void(l);
 		break;
 	case sc_waitpid:
-
+        mk_void(l);
 		break;
 	case sc_write:
-
+        mk_int(l);
+        mk_voidS(l);
+        mk_long(l);
 		break;
 	case sc_writev:
-
+        mk_int(l);
+        mk_IOchunkS(l);
+        mk_int(l);
 		break;
 	case sc_wstat:
-
+        mk_charS(l);
+        mk_ucharS(l);
+        mk_int(l);
 		break;
 	case sc_rendezvous:
-
+        mk_voidS(l);
+        mk_voidS(l);
 		break;
 	case sc_dirstat:
-
+        mk_charS(l);
 		break;
 	case sc_dirfstat:
-
+        mk_int(l);
 		break;
 	case sc_dirwstat:
-
+        mk_charS(l);
+        mk_DirS(l);
 		break;
 	case sc_dirfwstat:
-
+        mk_int(l);
+        mk_DirS(l);
 		break;
 	case sc_dirread:
-
+        mk_int(l);
+        mk_DirSS(l);
 		break;
 	case sc_nulldir:
-
+        mk_DirS(l);
 		break;
 	case sc_dirreadall:
-
+        mk_int(l);
+        mk_DirSS(l);
 		break;
 	case sc_getpid	:
-
+        mk_void(l);
 		break;
 	case sc_getppid:
-
+        mk_void(l);
 		break;
 	case sc_rerrstr:
-
+        mk_charS(l);
+        mk_uint(l);
 		break;
 	case sc_sysname:
-
+        mk_void(l);
 		break;
 	case sc_werrstr:
-
+        mk_charS(l);
 		break;
-
-	default:
-		return nil;
 	}
 
-	return nil; // Unreachable
+	return nil;
 }