From 3f955eba7f6eee3d98f78d3398863f3d922a0b35 Mon Sep 17 00:00:00 2001 From: Utkarsh Anand Date: Wed, 25 Oct 2017 12:57:47 +0530 Subject: Lots of changes to sys/netbsd (#397) * Lots of changes to sys/netbsd: - Removed a few syscalls that did not have proper constants defined. - Autogenerated *.const files. - Removed a few types like uid and gid, that were not available. - Ran make generate * Few changes for NetBSD support: - Added sys/netbsd/init.go - Added netbsd to sys/sys.go * Fix order in sys/sys.go * Update documentation for NetBSD --- sys/netbsd/amd64.go | 390 +++++++++++++++++++++++++++++++++++++++++++++ sys/netbsd/fs.txt | 5 - sys/netbsd/fs_amd64.const | 48 ++++++ sys/netbsd/init.go | 102 ++++++++++++ sys/netbsd/ipc.txt | 12 -- sys/netbsd/ipc_amd64.const | 37 +++++ sys/netbsd/mm.txt | 2 - sys/netbsd/mm_amd64.const | 30 ++++ sys/netbsd/socket.txt | 117 -------------- sys/sys.go | 1 + sys/syz-extract/extract.go | 1 + sys/syz-extract/netbsd.go | 74 +++++++++ sys/targets/targets.go | 13 ++ 13 files changed, 696 insertions(+), 136 deletions(-) create mode 100644 sys/netbsd/amd64.go create mode 100644 sys/netbsd/fs_amd64.const create mode 100644 sys/netbsd/init.go create mode 100644 sys/netbsd/ipc_amd64.const create mode 100644 sys/netbsd/mm_amd64.const delete mode 100644 sys/netbsd/socket.txt create mode 100644 sys/syz-extract/netbsd.go (limited to 'sys') diff --git a/sys/netbsd/amd64.go b/sys/netbsd/amd64.go new file mode 100644 index 000000000..bf7b6df10 --- /dev/null +++ b/sys/netbsd/amd64.go @@ -0,0 +1,390 @@ +// AUTOGENERATED FILE +package netbsd + +import . "github.com/google/syzkaller/prog" + +func init() { + RegisterTarget(&Target{OS: "netbsd", Arch: "amd64", Revision: revision_amd64, PtrSize: 8, Syscalls: syscalls_amd64, Resources: resources_amd64, Structs: structDescs_amd64, Consts: consts_amd64}, initTarget) +} + +var resources_amd64 = []*ResourceDesc{ + {Name: "fd", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd"}, Values: []uint64{18446744073709551615, 18446744073709551516}}, + {Name: "fd_dir", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd", "fd_dir"}, Values: []uint64{18446744073709551615, 18446744073709551516}}, + {Name: "ipc", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"ipc"}, Values: []uint64{0, 18446744073709551615}}, + {Name: "ipc_msq", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"ipc", "ipc_msq"}, Values: []uint64{0, 18446744073709551615}}, + {Name: "ipc_sem", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"ipc", "ipc_sem"}, Values: []uint64{0, 18446744073709551615}}, + {Name: "ipc_shm", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"ipc", "ipc_shm"}, Values: []uint64{0, 18446744073709551615}}, + {Name: "shmaddr", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "intptr", TypeSize: 8}}}, Kind: []string{"shmaddr"}, Values: []uint64{0}}, +} + +var structDescs_amd64 = []*KeyedStruct{ + {Key: StructKey{Name: "iovec_in"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "iovec_in", TypeSize: 16}, Fields: []Type{ + &PtrType{TypeCommon: TypeCommon{TypeName: "buffer", FldName: "addr", TypeSize: 8}, Type: &BufferType{}}, + &LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "len", TypeSize: 8}}, Buf: "addr"}, + }}}, + {Key: StructKey{Name: "iovec_out"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "iovec_out", TypeSize: 16}, Fields: []Type{ + &PtrType{TypeCommon: TypeCommon{TypeName: "buffer", FldName: "addr", TypeSize: 8}, Type: &BufferType{TypeCommon: TypeCommon{ArgDir: 1}}}, + &LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "len", TypeSize: 8}}, Buf: "addr"}, + }}}, + {Key: StructKey{Name: "ipc_perm"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "ipc_perm", TypeSize: 32}, Fields: []Type{ + &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", FldName: "key", TypeSize: 4}}}, + &FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "open_mode", FldName: "mode", TypeSize: 4}}, Vals: []uint64{256, 128, 64, 32, 16, 8, 4, 2, 1}}, + &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "seq", TypeSize: 2}}}, + &ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "pad0", TypeSize: 2}}}, + &ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "pad", TypeSize: 4}}, IsPad: true}, + &ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "pad1", TypeSize: 8}}}, + &ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "pad2", TypeSize: 8}}}, + }}}, + {Key: StructKey{Name: "msgbuf"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "msgbuf"}, Fields: []Type{ + &FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "msgbuf_type", FldName: "typ", TypeSize: 8}}, Vals: []uint64{0, 1, 2, 3}}, + &BufferType{TypeCommon: TypeCommon{TypeName: "array", FldName: "data"}}, + }}}, + {Key: StructKey{Name: "msgbuf", Dir: 1}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "msgbuf", ArgDir: 1}, Fields: []Type{ + &FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "msgbuf_type", FldName: "typ", TypeSize: 8, ArgDir: 1}}, Vals: []uint64{0, 1, 2, 3}}, + &BufferType{TypeCommon: TypeCommon{TypeName: "array", FldName: "data", ArgDir: 1}}, + }}}, + {Key: StructKey{Name: "pipefd", Dir: 1}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "pipefd", TypeSize: 8, ArgDir: 1}, Fields: []Type{ + &ResourceType{TypeCommon: TypeCommon{TypeName: "fd", FldName: "rfd", TypeSize: 4, ArgDir: 1}}, + &ResourceType{TypeCommon: TypeCommon{TypeName: "fd", FldName: "wfd", TypeSize: 4, ArgDir: 1}}, + }}}, + {Key: StructKey{Name: "sembuf"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "sembuf", TypeSize: 6}, Fields: []Type{ + &FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "sem_sem_id", FldName: "num", TypeSize: 2}}, Vals: []uint64{0, 1, 2, 3, 4}}, + &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "op", TypeSize: 2}}}, + &FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "semop_flags", FldName: "flg", TypeSize: 2}}, Vals: []uint64{2048, 4096}}, + }}}, + {Key: StructKey{Name: "semid_ds"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "semid_ds", TypeSize: 72}, Fields: []Type{ + &StructType{Key: StructKey{Name: "ipc_perm"}, FldName: "perm"}, + &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "intptr", FldName: "otime", TypeSize: 8}}}, + &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "intptr", FldName: "ctime", TypeSize: 8}}}, + &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "intptr", FldName: "nsems", TypeSize: 8}}}, + &ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "pad0", TypeSize: 8}}}, + &ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "pad1", TypeSize: 8}}}, + }}}, +} + +var syscalls_amd64 = []*Syscall{ + {NR: 6, Name: "close", CallName: "close", Args: []Type{ + &ResourceType{TypeCommon: TypeCommon{TypeName: "fd", FldName: "fd", TypeSize: 4}}, + }}, + {ID: 1, NR: 41, Name: "dup", CallName: "dup", Args: []Type{ + &ResourceType{TypeCommon: TypeCommon{TypeName: "fd", FldName: "oldfd", TypeSize: 4}}, + }, Ret: &ResourceType{TypeCommon: TypeCommon{TypeName: "fd", FldName: "ret", TypeSize: 4, ArgDir: 1}}}, + {ID: 2, NR: 90, Name: "dup2", CallName: "dup2", Args: []Type{ + &ResourceType{TypeCommon: TypeCommon{TypeName: "fd", FldName: "oldfd", TypeSize: 4}}, + &ResourceType{TypeCommon: TypeCommon{TypeName: "fd", FldName: "newfd", TypeSize: 4}}, + }, Ret: &ResourceType{TypeCommon: TypeCommon{TypeName: "fd", FldName: "ret", TypeSize: 4, ArgDir: 1}}}, + {ID: 3, NR: 199, Name: "lseek", CallName: "lseek", Args: []Type{ + &ResourceType{TypeCommon: TypeCommon{TypeName: "fd", FldName: "fd", TypeSize: 4}}, + &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "fileoff", FldName: "offset", TypeSize: 8}}, Kind: 1}, + &FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "seek_whence", FldName: "whence", TypeSize: 8}}, Vals: []uint64{0, 1, 2}}, + }}, + {ID: 4, NR: 75, Name: "madvise", CallName: "madvise", Args: []Type{ + &VmaType{TypeCommon: TypeCommon{TypeName: "vma", FldName: "addr", TypeSize: 8}}, + &LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "len", TypeSize: 8}}, Buf: "addr"}, + &FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "madvise_flags", FldName: "advice", TypeSize: 8}}, Vals: []uint64{0, 1, 2, 3, 4, 6}}, + }}, + {ID: 5, NR: 203, Name: "mlock", CallName: "mlock", Args: []Type{ + &VmaType{TypeCommon: TypeCommon{TypeName: "vma", FldName: "addr", TypeSize: 8}}, + &LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "size", TypeSize: 8}}, Buf: "addr"}, + }}, + {ID: 6, NR: 242, Name: "mlockall", CallName: "mlockall", Args: []Type{ + &FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "mlockall_flags", FldName: "flags", TypeSize: 8}}, Vals: []uint64{1, 2}}, + }}, + {ID: 7, NR: 197, Name: "mmap", CallName: "mmap", Args: []Type{ + &VmaType{TypeCommon: TypeCommon{TypeName: "vma", FldName: "addr", TypeSize: 8}}, + &LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "len", TypeSize: 8}}, Buf: "addr"}, + &FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "mmap_prot", FldName: "prot", TypeSize: 8}}, Vals: []uint64{4, 1, 2, 0}}, + &FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "mmap_flags", FldName: "flags", TypeSize: 8}}, Vals: []uint64{4096, 0, 16, 512, 128, 1024, 2048, 2, 1}}, + &ResourceType{TypeCommon: TypeCommon{TypeName: "fd", FldName: "fd", TypeSize: 4}}, + &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "fileoff", FldName: "offset", TypeSize: 8}}, Kind: 1}, + }, Ret: &VmaType{TypeCommon: TypeCommon{TypeName: "vma", FldName: "ret", TypeSize: 8, ArgDir: 1}}}, + {ID: 8, NR: 74, Name: "mprotect", CallName: "mprotect", Args: []Type{ + &VmaType{TypeCommon: TypeCommon{TypeName: "vma", FldName: "addr", TypeSize: 8}}, + &LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "len", TypeSize: 8}}, Buf: "addr"}, + &FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "mmap_prot", FldName: "prot", TypeSize: 8}}, Vals: []uint64{4, 1, 2, 0}}, + }}, + {ID: 9, NR: 225, Name: "msgget", CallName: "msgget", Args: []Type{ + &ProcType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "proc", FldName: "key", TypeSize: 8}}, ValuesStart: 2039379027, ValuesPerProc: 4}, + &FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "msgget_flags", FldName: "flags", TypeSize: 8}}, Vals: []uint64{512, 1024, 256, 128, 64, 32, 16, 8, 4, 2, 1}}, + }, Ret: &ResourceType{TypeCommon: TypeCommon{TypeName: "ipc_msq", FldName: "ret", TypeSize: 4, ArgDir: 1}}}, + {ID: 10, NR: 225, Name: "msgget$private", CallName: "msgget", Args: []Type{ + &ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "key", TypeSize: 8}}}, + &FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "msgget_flags", FldName: "flags", TypeSize: 8}}, Vals: []uint64{512, 1024, 256, 128, 64, 32, 16, 8, 4, 2, 1}}, + }, Ret: &ResourceType{TypeCommon: TypeCommon{TypeName: "ipc_msq", FldName: "ret", TypeSize: 4, ArgDir: 1}}}, + {ID: 11, NR: 227, Name: "msgrcv", CallName: "msgrcv", Args: []Type{ + &ResourceType{TypeCommon: TypeCommon{TypeName: "ipc_msq", FldName: "msqid", TypeSize: 4}}, + &PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "msgp", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "msgbuf", Dir: 1}}}, + &LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "sz", TypeSize: 8}}, Buf: "msgp"}, + &FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "msgbuf_type", FldName: "typ", TypeSize: 8}}, Vals: []uint64{0, 1, 2, 3}}, + &FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "msgrcv_flags", FldName: "flags", TypeSize: 8}}, Vals: []uint64{2048, 4096}}, + }}, + {ID: 12, NR: 226, Name: "msgsnd", CallName: "msgsnd", Args: []Type{ + &ResourceType{TypeCommon: TypeCommon{TypeName: "ipc_msq", FldName: "msqid", TypeSize: 4}}, + &PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "msgp", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "msgbuf"}}}, + &LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "sz", TypeSize: 8}}, Buf: "msgp"}, + &FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "msgsnd_flags", FldName: "flags", TypeSize: 8}}, Vals: []uint64{2048}}, + }}, + {ID: 13, NR: 204, Name: "munlock", CallName: "munlock", Args: []Type{ + &VmaType{TypeCommon: TypeCommon{TypeName: "vma", FldName: "addr", TypeSize: 8}}, + &LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "size", TypeSize: 8}}, Buf: "addr"}, + }}, + {ID: 14, NR: 243, Name: "munlockall", CallName: "munlockall"}, + {ID: 15, NR: 73, Name: "munmap", CallName: "munmap", Args: []Type{ + &VmaType{TypeCommon: TypeCommon{TypeName: "vma", FldName: "addr", TypeSize: 8}}, + &LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "len", TypeSize: 8}}, Buf: "addr"}, + }}, + {ID: 16, NR: 5, Name: "open", CallName: "open", Args: []Type{ + &PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "file", TypeSize: 8}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "filename"}, Kind: 3}}, + &FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "open_flags", FldName: "flags", TypeSize: 8}}, Vals: []uint64{0, 1, 2, 8, 512, 1024, 2048, 16, 32, 256, 4194304, 16777216, 65536, 128, 131072, 262144, 32768, 524288, 2097152, 64}}, + &FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "open_mode", FldName: "mode", TypeSize: 8}}, Vals: []uint64{256, 128, 64, 32, 16, 8, 4, 2, 1}}, + }, Ret: &ResourceType{TypeCommon: TypeCommon{TypeName: "fd", FldName: "ret", TypeSize: 4, ArgDir: 1}}}, + {ID: 17, NR: 5, Name: "open$dir", CallName: "open", Args: []Type{ + &PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "file", TypeSize: 8}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "filename"}, Kind: 3}}, + &FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "open_flags", FldName: "flags", TypeSize: 8}}, Vals: []uint64{0, 1, 2, 8, 512, 1024, 2048, 16, 32, 256, 4194304, 16777216, 65536, 128, 131072, 262144, 32768, 524288, 2097152, 64}}, + &FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "open_mode", FldName: "mode", TypeSize: 8}}, Vals: []uint64{256, 128, 64, 32, 16, 8, 4, 2, 1}}, + }, Ret: &ResourceType{TypeCommon: TypeCommon{TypeName: "fd_dir", FldName: "ret", TypeSize: 4, ArgDir: 1}}}, + {ID: 18, NR: 468, Name: "openat", CallName: "openat", Args: []Type{ + &ResourceType{TypeCommon: TypeCommon{TypeName: "fd_dir", FldName: "fd", TypeSize: 4}}, + &PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "file", TypeSize: 8}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "filename"}, Kind: 3}}, + &FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "open_flags", FldName: "flags", TypeSize: 8}}, Vals: []uint64{0, 1, 2, 8, 512, 1024, 2048, 16, 32, 256, 4194304, 16777216, 65536, 128, 131072, 262144, 32768, 524288, 2097152, 64}}, + &FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "open_mode", FldName: "mode", TypeSize: 8}}, Vals: []uint64{256, 128, 64, 32, 16, 8, 4, 2, 1}}, + }, Ret: &ResourceType{TypeCommon: TypeCommon{TypeName: "fd", FldName: "ret", TypeSize: 4, ArgDir: 1}}}, + {ID: 19, NR: 453, Name: "pipe2", CallName: "pipe2", Args: []Type{ + &PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "pipefd", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "pipefd", Dir: 1}}}, + &FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "pipe_flags", FldName: "flags", TypeSize: 8}}, Vals: []uint64{4, 4194304, 16777216}}, + }}, + {ID: 20, NR: 289, Name: "preadv", CallName: "preadv", Args: []Type{ + &ResourceType{TypeCommon: TypeCommon{TypeName: "fd", FldName: "fd", TypeSize: 4}}, + &PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "vec", TypeSize: 8}, Type: &ArrayType{TypeCommon: TypeCommon{TypeName: "array"}, Type: &StructType{Key: StructKey{Name: "iovec_out"}}}}, + &LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "vlen", TypeSize: 8}}, Buf: "vec"}, + &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "fileoff", FldName: "off", TypeSize: 8}}, Kind: 1}, + }}, + {ID: 21, NR: 290, Name: "pwritev", CallName: "pwritev", Args: []Type{ + &ResourceType{TypeCommon: TypeCommon{TypeName: "fd", FldName: "fd", TypeSize: 4}}, + &PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "vec", TypeSize: 8}, Type: &ArrayType{TypeCommon: TypeCommon{TypeName: "array"}, Type: &StructType{Key: StructKey{Name: "iovec_in"}}}}, + &LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "vlen", TypeSize: 8}}, Buf: "vec"}, + &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "fileoff", FldName: "off", TypeSize: 8}}, Kind: 1}, + }}, + {ID: 22, NR: 3, Name: "read", CallName: "read", Args: []Type{ + &ResourceType{TypeCommon: TypeCommon{TypeName: "fd", FldName: "fd", TypeSize: 4}}, + &PtrType{TypeCommon: TypeCommon{TypeName: "buffer", FldName: "buf", TypeSize: 8}, Type: &BufferType{TypeCommon: TypeCommon{ArgDir: 1}}}, + &LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "count", TypeSize: 8}}, Buf: "buf"}, + }}, + {ID: 23, NR: 120, Name: "readv", CallName: "readv", Args: []Type{ + &ResourceType{TypeCommon: TypeCommon{TypeName: "fd", FldName: "fd", TypeSize: 4}}, + &PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "vec", TypeSize: 8}, Type: &ArrayType{TypeCommon: TypeCommon{TypeName: "array"}, Type: &StructType{Key: StructKey{Name: "iovec_out"}}}}, + &LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "vlen", TypeSize: 8}}, Buf: "vec"}, + }}, + {ID: 24, NR: 510, Name: "semctl$GETALL", CallName: "semctl", Args: []Type{ + &ResourceType{TypeCommon: TypeCommon{TypeName: "ipc_sem", FldName: "semid", TypeSize: 4}}, + &ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "semnum", TypeSize: 8}}}, + &ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "cmd", TypeSize: 8}}, Val: 6}, + &PtrType{TypeCommon: TypeCommon{TypeName: "buffer", FldName: "arg", TypeSize: 8}, Type: &BufferType{TypeCommon: TypeCommon{ArgDir: 1}}}, + }}, + {ID: 25, NR: 510, Name: "semctl$GETNCNT", CallName: "semctl", Args: []Type{ + &ResourceType{TypeCommon: TypeCommon{TypeName: "ipc_sem", FldName: "semid", TypeSize: 4}}, + &FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "sem_sem_id", FldName: "semnum", TypeSize: 8}}, Vals: []uint64{0, 1, 2, 3, 4}}, + &ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "cmd", TypeSize: 8}}, Val: 3}, + &PtrType{TypeCommon: TypeCommon{TypeName: "buffer", FldName: "arg", TypeSize: 8}, Type: &BufferType{TypeCommon: TypeCommon{ArgDir: 1}}}, + }}, + {ID: 26, NR: 510, Name: "semctl$GETPID", CallName: "semctl", Args: []Type{ + &ResourceType{TypeCommon: TypeCommon{TypeName: "ipc_sem", FldName: "semid", TypeSize: 4}}, + &FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "sem_sem_id", FldName: "semnum", TypeSize: 8}}, Vals: []uint64{0, 1, 2, 3, 4}}, + &ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "cmd", TypeSize: 8}}, Val: 4}, + &PtrType{TypeCommon: TypeCommon{TypeName: "buffer", FldName: "arg", TypeSize: 8}, Type: &BufferType{TypeCommon: TypeCommon{ArgDir: 1}}}, + }}, + {ID: 27, NR: 510, Name: "semctl$GETVAL", CallName: "semctl", Args: []Type{ + &ResourceType{TypeCommon: TypeCommon{TypeName: "ipc_sem", FldName: "semid", TypeSize: 4}}, + &FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "sem_sem_id", FldName: "semnum", TypeSize: 8}}, Vals: []uint64{0, 1, 2, 3, 4}}, + &ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "cmd", TypeSize: 8}}, Val: 5}, + &PtrType{TypeCommon: TypeCommon{TypeName: "buffer", FldName: "arg", TypeSize: 8}, Type: &BufferType{TypeCommon: TypeCommon{ArgDir: 1}}}, + }}, + {ID: 28, NR: 510, Name: "semctl$GETZCNT", CallName: "semctl", Args: []Type{ + &ResourceType{TypeCommon: TypeCommon{TypeName: "ipc_sem", FldName: "semid", TypeSize: 4}}, + &FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "sem_sem_id", FldName: "semnum", TypeSize: 8}}, Vals: []uint64{0, 1, 2, 3, 4}}, + &ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "cmd", TypeSize: 8}}, Val: 7}, + &PtrType{TypeCommon: TypeCommon{TypeName: "buffer", FldName: "arg", TypeSize: 8}, Type: &BufferType{TypeCommon: TypeCommon{ArgDir: 1}}}, + }}, + {ID: 29, NR: 510, Name: "semctl$IPC_RMID", CallName: "semctl", Args: []Type{ + &ResourceType{TypeCommon: TypeCommon{TypeName: "ipc_sem", FldName: "semid", TypeSize: 4}}, + &ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "semnum", TypeSize: 8}}}, + &ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "cmd", TypeSize: 8}}}, + }}, + {ID: 30, NR: 510, Name: "semctl$IPC_SET", CallName: "semctl", Args: []Type{ + &ResourceType{TypeCommon: TypeCommon{TypeName: "ipc_sem", FldName: "semid", TypeSize: 4}}, + &ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "semnum", TypeSize: 8}}}, + &ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "cmd", TypeSize: 8}}, Val: 1}, + &PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "arg", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "semid_ds"}}}, + }}, + {ID: 31, NR: 510, Name: "semctl$IPC_STAT", CallName: "semctl", Args: []Type{ + &ResourceType{TypeCommon: TypeCommon{TypeName: "ipc_sem", FldName: "semid", TypeSize: 4}}, + &ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "semnum", TypeSize: 8}}}, + &ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "cmd", TypeSize: 8}}, Val: 2}, + &PtrType{TypeCommon: TypeCommon{TypeName: "buffer", FldName: "arg", TypeSize: 8}, Type: &BufferType{TypeCommon: TypeCommon{ArgDir: 1}}}, + }}, + {ID: 32, NR: 510, Name: "semctl$SETALL", CallName: "semctl", Args: []Type{ + &ResourceType{TypeCommon: TypeCommon{TypeName: "ipc_sem", FldName: "semid", TypeSize: 4}}, + &ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "semnum", TypeSize: 8}}}, + &ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "cmd", TypeSize: 8}}, Val: 9}, + &PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "arg", TypeSize: 8}, Type: &ArrayType{TypeCommon: TypeCommon{TypeName: "array"}, Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", TypeSize: 2}}}}}, + }}, + {ID: 33, NR: 510, Name: "semctl$SETVAL", CallName: "semctl", Args: []Type{ + &ResourceType{TypeCommon: TypeCommon{TypeName: "ipc_sem", FldName: "semid", TypeSize: 4}}, + &FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "sem_sem_id", FldName: "semnum", TypeSize: 8}}, Vals: []uint64{0, 1, 2, 3, 4}}, + &ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "cmd", TypeSize: 8}}, Val: 8}, + &PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "arg", TypeSize: 8}, Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}}, + }}, + {ID: 34, NR: 221, Name: "semget", CallName: "semget", Args: []Type{ + &ProcType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "proc", FldName: "key", TypeSize: 8}}, ValuesStart: 2039359027, ValuesPerProc: 4}, + &FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "sem_sem_id", FldName: "nsems", TypeSize: 8}}, Vals: []uint64{0, 1, 2, 3, 4}}, + &FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "semget_flags", FldName: "flags", TypeSize: 8}}, Vals: []uint64{512, 1024, 256, 128, 64, 32, 16, 8, 4, 2, 1}}, + }, Ret: &ResourceType{TypeCommon: TypeCommon{TypeName: "ipc_sem", FldName: "ret", TypeSize: 4, ArgDir: 1}}}, + {ID: 35, NR: 221, Name: "semget$private", CallName: "semget", Args: []Type{ + &ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "key", TypeSize: 8}}}, + &FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "sem_sem_id", FldName: "nsems", TypeSize: 8}}, Vals: []uint64{0, 1, 2, 3, 4}}, + &FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "semget_flags", FldName: "flags", TypeSize: 8}}, Vals: []uint64{512, 1024, 256, 128, 64, 32, 16, 8, 4, 2, 1}}, + }, Ret: &ResourceType{TypeCommon: TypeCommon{TypeName: "ipc_sem", FldName: "ret", TypeSize: 4, ArgDir: 1}}}, + {ID: 36, NR: 222, Name: "semop", CallName: "semop", Args: []Type{ + &ResourceType{TypeCommon: TypeCommon{TypeName: "ipc_sem", FldName: "semid", TypeSize: 4}}, + &PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "ops", TypeSize: 8}, Type: &ArrayType{TypeCommon: TypeCommon{TypeName: "array"}, Type: &StructType{Key: StructKey{Name: "sembuf"}}}}, + &LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "nops", TypeSize: 8}}, Buf: "ops"}, + }}, + {ID: 37, NR: 228, Name: "shmat", CallName: "shmat", Args: []Type{ + &ResourceType{TypeCommon: TypeCommon{TypeName: "ipc_shm", FldName: "shmid", TypeSize: 4}}, + &VmaType{TypeCommon: TypeCommon{TypeName: "vma", FldName: "addr", TypeSize: 8}}, + &FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "shmat_flags", FldName: "flags", TypeSize: 8}}, Vals: []uint64{8192, 4096}}, + }, Ret: &ResourceType{TypeCommon: TypeCommon{TypeName: "shmaddr", FldName: "ret", TypeSize: 8, ArgDir: 1}}}, + {ID: 38, NR: 230, Name: "shmdt", CallName: "shmdt", Args: []Type{ + &ResourceType{TypeCommon: TypeCommon{TypeName: "shmaddr", FldName: "addr", TypeSize: 8}}, + }}, + {ID: 39, NR: 231, Name: "shmget", CallName: "shmget", Args: []Type{ + &ProcType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "proc", FldName: "key", TypeSize: 8}}, ValuesStart: 2039339027, ValuesPerProc: 4}, + &LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "size", TypeSize: 8}}, Buf: "unused"}, + &FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "shmget_flags", FldName: "flags", TypeSize: 8}}, Vals: []uint64{512, 1024, 256, 128, 64, 32, 16, 8, 4, 2, 1}}, + &VmaType{TypeCommon: TypeCommon{TypeName: "vma", FldName: "unused", TypeSize: 8}}, + }, Ret: &ResourceType{TypeCommon: TypeCommon{TypeName: "ipc_shm", FldName: "ret", TypeSize: 4, ArgDir: 1}}}, + {ID: 40, NR: 231, Name: "shmget$private", CallName: "shmget", Args: []Type{ + &ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "key", TypeSize: 8}}}, + &LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "size", TypeSize: 8}}, Buf: "unused"}, + &FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "shmget_flags", FldName: "flags", TypeSize: 8}}, Vals: []uint64{512, 1024, 256, 128, 64, 32, 16, 8, 4, 2, 1}}, + &VmaType{TypeCommon: TypeCommon{TypeName: "vma", FldName: "unused", TypeSize: 8}}, + }, Ret: &ResourceType{TypeCommon: TypeCommon{TypeName: "ipc_shm", FldName: "ret", TypeSize: 4, ArgDir: 1}}}, + {ID: 41, NR: 4, Name: "write", CallName: "write", Args: []Type{ + &ResourceType{TypeCommon: TypeCommon{TypeName: "fd", FldName: "fd", TypeSize: 4}}, + &PtrType{TypeCommon: TypeCommon{TypeName: "buffer", FldName: "buf", TypeSize: 8}, Type: &BufferType{}}, + &LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "count", TypeSize: 8}}, Buf: "buf"}, + }}, + {ID: 42, NR: 121, Name: "writev", CallName: "writev", Args: []Type{ + &ResourceType{TypeCommon: TypeCommon{TypeName: "fd", FldName: "fd", TypeSize: 4}}, + &PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "vec", TypeSize: 8}, Type: &ArrayType{TypeCommon: TypeCommon{TypeName: "array"}, Type: &StructType{Key: StructKey{Name: "iovec_in"}}}}, + &LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "vlen", TypeSize: 8}}, Buf: "vec"}, + }}, +} + +var consts_amd64 = []ConstValue{ + {Name: "AT_FDCWD", Value: 18446744073709551516}, + {Name: "GETALL", Value: 6}, + {Name: "GETNCNT", Value: 3}, + {Name: "GETPID", Value: 4}, + {Name: "GETVAL", Value: 5}, + {Name: "GETZCNT", Value: 7}, + {Name: "IPC_CREAT", Value: 512}, + {Name: "IPC_EXCL", Value: 1024}, + {Name: "IPC_NOWAIT", Value: 2048}, + {Name: "IPC_PRIVATE"}, + {Name: "IPC_RMID"}, + {Name: "IPC_SET", Value: 1}, + {Name: "IPC_STAT", Value: 2}, + {Name: "MADV_DONTNEED", Value: 4}, + {Name: "MADV_FREE", Value: 6}, + {Name: "MADV_NORMAL"}, + {Name: "MADV_RANDOM", Value: 1}, + {Name: "MADV_SEQUENTIAL", Value: 2}, + {Name: "MADV_WILLNEED", Value: 3}, + {Name: "MAP_ANON", Value: 4096}, + {Name: "MAP_FILE"}, + {Name: "MAP_FIXED", Value: 16}, + {Name: "MAP_HASSEMAPHORE", Value: 512}, + {Name: "MAP_INHERIT", Value: 128}, + {Name: "MAP_PRIVATE", Value: 2}, + {Name: "MAP_SHARED", Value: 1}, + {Name: "MAP_TRYFIXED", Value: 1024}, + {Name: "MAP_WIRED", Value: 2048}, + {Name: "MCL_CURRENT", Value: 1}, + {Name: "MCL_FUTURE", Value: 2}, + {Name: "MSG_NOERROR", Value: 4096}, + {Name: "O_ALT_IO", Value: 262144}, + {Name: "O_APPEND", Value: 8}, + {Name: "O_ASYNC", Value: 64}, + {Name: "O_CLOEXEC", Value: 4194304}, + {Name: "O_CREAT", Value: 512}, + {Name: "O_DIRECT", Value: 524288}, + {Name: "O_DIRECTORY", Value: 2097152}, + {Name: "O_DSYNC", Value: 65536}, + {Name: "O_EXCL", Value: 2048}, + {Name: "O_EXLOCK", Value: 32}, + {Name: "O_NOCTTY", Value: 32768}, + {Name: "O_NOFOLLOW", Value: 256}, + {Name: "O_NONBLOCK", Value: 4}, + {Name: "O_NOSIGPIPE", Value: 16777216}, + {Name: "O_RDONLY"}, + {Name: "O_RDWR", Value: 2}, + {Name: "O_RSYNC", Value: 131072}, + {Name: "O_SHLOCK", Value: 16}, + {Name: "O_SYNC", Value: 128}, + {Name: "O_TRUNC", Value: 1024}, + {Name: "O_WRONLY", Value: 1}, + {Name: "PROT_EXEC", Value: 4}, + {Name: "PROT_NONE"}, + {Name: "PROT_READ", Value: 1}, + {Name: "PROT_WRITE", Value: 2}, + {Name: "SEEK_CUR", Value: 1}, + {Name: "SEEK_END", Value: 2}, + {Name: "SEEK_SET"}, + {Name: "SEM_UNDO", Value: 4096}, + {Name: "SETALL", Value: 9}, + {Name: "SETVAL", Value: 8}, + {Name: "SHM_RDONLY", Value: 4096}, + {Name: "SHM_RND", Value: 8192}, + {Name: "SYS_close", Value: 6}, + {Name: "SYS_dup", Value: 41}, + {Name: "SYS_dup2", Value: 90}, + {Name: "SYS_lseek", Value: 199}, + {Name: "SYS_madvise", Value: 75}, + {Name: "SYS_mlock", Value: 203}, + {Name: "SYS_mlockall", Value: 242}, + {Name: "SYS_mmap", Value: 197}, + {Name: "SYS_mprotect", Value: 74}, + {Name: "SYS_msgget", Value: 225}, + {Name: "SYS_msgrcv", Value: 227}, + {Name: "SYS_msgsnd", Value: 226}, + {Name: "SYS_munlock", Value: 204}, + {Name: "SYS_munlockall", Value: 243}, + {Name: "SYS_munmap", Value: 73}, + {Name: "SYS_open", Value: 5}, + {Name: "SYS_openat", Value: 468}, + {Name: "SYS_pipe2", Value: 453}, + {Name: "SYS_preadv", Value: 289}, + {Name: "SYS_pwritev", Value: 290}, + {Name: "SYS_read", Value: 3}, + {Name: "SYS_readv", Value: 120}, + {Name: "SYS_semctl", Value: 510}, + {Name: "SYS_semget", Value: 221}, + {Name: "SYS_semop", Value: 222}, + {Name: "SYS_shmat", Value: 228}, + {Name: "SYS_shmdt", Value: 230}, + {Name: "SYS_shmget", Value: 231}, + {Name: "SYS_write", Value: 4}, + {Name: "SYS_writev", Value: 121}, + {Name: "S_IRGRP", Value: 32}, + {Name: "S_IROTH", Value: 4}, + {Name: "S_IRUSR", Value: 256}, + {Name: "S_IWGRP", Value: 16}, + {Name: "S_IWOTH", Value: 2}, + {Name: "S_IWUSR", Value: 128}, + {Name: "S_IXGRP", Value: 8}, + {Name: "S_IXOTH", Value: 1}, + {Name: "S_IXUSR", Value: 64}, +} + +const revision_amd64 = "afbcea24bf5398f333788540f821f68b9e6fbe66" diff --git a/sys/netbsd/fs.txt b/sys/netbsd/fs.txt index 16d1d03f8..1a18a172d 100644 --- a/sys/netbsd/fs.txt +++ b/sys/netbsd/fs.txt @@ -10,8 +10,6 @@ resource fd[int32]: 0xffffffffffffffff, AT_FDCWD resource fd_dir[fd] resource pid[int32]: 0, 0xffffffffffffffff -resource uid[int32]: 0, 0xffffffffffffffff -resource gid[int32]: 0, 0xffffffffffffffff open(file ptr[in, filename], flags flags[open_flags], mode flags[open_mode]) fd # Just so that we have something that creates fd_dir resources. @@ -28,7 +26,6 @@ lseek(fd fd, offset fileoff, whence flags[seek_whence]) dup(oldfd fd) fd dup2(oldfd fd, newfd fd) fd pipe2(pipefd ptr[out, pipefd], flags flags[pipe_flags]) -fstat(fd fd, statbuf ptr[out, stat]) pipefd { rfd fd @@ -50,8 +47,6 @@ stat { ino int32 mode int16 nlink int16 - uid uid - gid gid rdev int16 size int32 blksize int32 diff --git a/sys/netbsd/fs_amd64.const b/sys/netbsd/fs_amd64.const new file mode 100644 index 000000000..3b8b40a7d --- /dev/null +++ b/sys/netbsd/fs_amd64.const @@ -0,0 +1,48 @@ +# AUTOGENERATED FILE +AT_FDCWD = 18446744073709551516 +O_ALT_IO = 262144 +O_APPEND = 8 +O_ASYNC = 64 +O_CLOEXEC = 4194304 +O_CREAT = 512 +O_DIRECT = 524288 +O_DIRECTORY = 2097152 +O_DSYNC = 65536 +O_EXCL = 2048 +O_EXLOCK = 32 +O_NOCTTY = 32768 +O_NOFOLLOW = 256 +O_NONBLOCK = 4 +O_NOSIGPIPE = 16777216 +O_RDONLY = 0 +O_RDWR = 2 +O_RSYNC = 131072 +O_SHLOCK = 16 +O_SYNC = 128 +O_TRUNC = 1024 +O_WRONLY = 1 +SEEK_CUR = 1 +SEEK_END = 2 +SEEK_SET = 0 +SYS_close = 6 +SYS_dup = 41 +SYS_dup2 = 90 +SYS_lseek = 199 +SYS_open = 5 +SYS_openat = 468 +SYS_pipe2 = 453 +SYS_preadv = 289 +SYS_pwritev = 290 +SYS_read = 3 +SYS_readv = 120 +SYS_write = 4 +SYS_writev = 121 +S_IRGRP = 32 +S_IROTH = 4 +S_IRUSR = 256 +S_IWGRP = 16 +S_IWOTH = 2 +S_IWUSR = 128 +S_IXGRP = 8 +S_IXOTH = 1 +S_IXUSR = 64 diff --git a/sys/netbsd/init.go b/sys/netbsd/init.go new file mode 100644 index 000000000..a4dc1eb11 --- /dev/null +++ b/sys/netbsd/init.go @@ -0,0 +1,102 @@ +// Copyright 2017 syzkaller project authors. All rights reserved. +// Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file. + +package netbsd + +import ( + "github.com/google/syzkaller/prog" +) + +func initTarget(target *prog.Target) { + arch := &arch{ + mmapSyscall: target.SyscallMap["mmap"], + PROT_READ: target.ConstMap["PROT_READ"], + PROT_WRITE: target.ConstMap["PROT_WRITE"], + MAP_ANONYMOUS: target.ConstMap["MAP_ANON"], + MAP_PRIVATE: target.ConstMap["MAP_PRIVATE"], + MAP_FIXED: target.ConstMap["MAP_FIXED"], + } + + target.PageSize = pageSize + target.DataOffset = dataOffset + target.MmapSyscall = arch.mmapSyscall + target.MakeMmap = arch.makeMmap + target.AnalyzeMmap = arch.analyzeMmap + target.SanitizeCall = arch.sanitizeCall +} + +const ( + pageSize = 4 << 10 + dataOffset = 512 << 20 + invalidFD = ^uint64(0) +) + +type arch struct { + mmapSyscall *prog.Syscall + clockGettimeSyscall *prog.Syscall + + PROT_READ uint64 + PROT_WRITE uint64 + MAP_ANONYMOUS uint64 + MAP_PRIVATE uint64 + MAP_FIXED uint64 +} + +// createMmapCall creates a "normal" mmap call that maps [start, start+npages) page range. +func (arch *arch) makeMmap(start, npages uint64) *prog.Call { + meta := arch.mmapSyscall + return &prog.Call{ + Meta: meta, + Args: []prog.Arg{ + prog.MakePointerArg(meta.Args[0], start, 0, npages, nil), + prog.MakeConstArg(meta.Args[1], npages*pageSize), + prog.MakeConstArg(meta.Args[2], arch.PROT_READ|arch.PROT_WRITE), + prog.MakeConstArg(meta.Args[3], arch.MAP_ANONYMOUS|arch.MAP_PRIVATE|arch.MAP_FIXED), + prog.MakeResultArg(meta.Args[4], nil, invalidFD), + prog.MakeConstArg(meta.Args[5], 0), + }, + Ret: prog.MakeReturnArg(meta.Ret), + } +} + +func (arch *arch) analyzeMmap(c *prog.Call) (start, npages uint64, mapped bool) { + switch c.Meta.Name { + case "mmap": + // Filter out only very wrong arguments. + npages = c.Args[1].(*prog.ConstArg).Val / pageSize + if npages == 0 { + return + } + flags := c.Args[3].(*prog.ConstArg).Val + fd := c.Args[4].(*prog.ResultArg).Val + if flags&arch.MAP_ANONYMOUS == 0 && fd == invalidFD { + return + } + start = c.Args[0].(*prog.PointerArg).PageIndex + mapped = true + return + case "munmap": + start = c.Args[0].(*prog.PointerArg).PageIndex + npages = c.Args[1].(*prog.ConstArg).Val / pageSize + mapped = false + return + default: + return + } +} + +func (arch *arch) sanitizeCall(c *prog.Call) { + switch c.Meta.CallName { + case "mmap": + // Add MAP_FIXED flag, otherwise it produces non-deterministic results. + c.Args[3].(*prog.ConstArg).Val |= arch.MAP_FIXED + case "mknod", "mknodat": + break + case "exit": + code := c.Args[0].(*prog.ConstArg) + // These codes are reserved by executor. + if code.Val%128 == 67 || code.Val%128 == 68 { + code.Val = 1 + } + } +} diff --git a/sys/netbsd/ipc.txt b/sys/netbsd/ipc.txt index 75f45dd72..dc1e4d36e 100644 --- a/sys/netbsd/ipc.txt +++ b/sys/netbsd/ipc.txt @@ -20,9 +20,6 @@ msgget(key proc[2039379027, 4], flags flags[msgget_flags]) ipc_msq msgget$private(key const[IPC_PRIVATE], flags flags[msgget_flags]) ipc_msq msgsnd(msqid ipc_msq, msgp ptr[in, msgbuf], sz len[msgp], flags flags[msgsnd_flags]) msgrcv(msqid ipc_msq, msgp ptr[out, msgbuf], sz len[msgp], typ flags[msgbuf_type], flags flags[msgrcv_flags]) -msgctl$IPC_STAT(msqid ipc_msq, cmd const[IPC_STAT], buf buffer[out]) -msgctl$IPC_SET(msqid ipc_msq, cmd const[IPC_SET], buf ptr[in, msqid_ds]) -msgctl$IPC_RMID(msqid ipc_msq, cmd const[IPC_RMID]) resource ipc_sem[ipc] semget(key proc[2039359027, 4], nsems flags[sem_sem_id], flags flags[semget_flags]) ipc_sem @@ -46,11 +43,6 @@ resource shmaddr[intptr]: 0 shmget(key proc[2039339027, 4], size len[unused], flags flags[shmget_flags], unused vma) ipc_shm shmget$private(key const[IPC_PRIVATE], size len[unused], flags flags[shmget_flags], unused vma) ipc_shm shmat(shmid ipc_shm, addr vma, flags flags[shmat_flags]) shmaddr -shmctl$IPC_STAT(shmid ipc_shm, cmd const[IPC_STAT], buf buffer[out]) -shmctl$IPC_SET(shmid ipc_shm, cmd const[IPC_SET], buf ptr[in, shmid_ds]) -shmctl$IPC_RMID(shmid ipc_shm, cmd const[IPC_RMID]) -shmctl$SHM_LOCK(shmid ipc_shm, cmd const[SHM_LOCK]) -shmctl$SHM_UNLOCK(shmid ipc_shm, cmd const[SHM_UNLOCK]) shmdt(addr shmaddr) msgget_flags = IPC_CREAT, IPC_EXCL, S_IRUSR, S_IWUSR, S_IXUSR, S_IRGRP, S_IWGRP, S_IXGRP, S_IROTH, S_IWOTH, S_IXOTH @@ -65,10 +57,6 @@ shmat_flags = SHM_RND, SHM_RDONLY ipc_perm { key int32 - uid uid - gid gid - cuid uid - cgid gid mode flags[open_mode, int32] seq int16 pad0 const[0, int16] diff --git a/sys/netbsd/ipc_amd64.const b/sys/netbsd/ipc_amd64.const new file mode 100644 index 000000000..826ae6914 --- /dev/null +++ b/sys/netbsd/ipc_amd64.const @@ -0,0 +1,37 @@ +# AUTOGENERATED FILE +GETALL = 6 +GETNCNT = 3 +GETPID = 4 +GETVAL = 5 +GETZCNT = 7 +IPC_CREAT = 512 +IPC_EXCL = 1024 +IPC_NOWAIT = 2048 +IPC_PRIVATE = 0 +IPC_RMID = 0 +IPC_SET = 1 +IPC_STAT = 2 +MSG_NOERROR = 4096 +SEM_UNDO = 4096 +SETALL = 9 +SETVAL = 8 +SHM_RDONLY = 4096 +SHM_RND = 8192 +SYS_msgget = 225 +SYS_msgrcv = 227 +SYS_msgsnd = 226 +SYS_semctl = 510 +SYS_semget = 221 +SYS_semop = 222 +SYS_shmat = 228 +SYS_shmdt = 230 +SYS_shmget = 231 +S_IRGRP = 32 +S_IROTH = 4 +S_IRUSR = 256 +S_IWGRP = 16 +S_IWOTH = 2 +S_IWUSR = 128 +S_IXGRP = 8 +S_IXOTH = 1 +S_IXUSR = 64 diff --git a/sys/netbsd/mm.txt b/sys/netbsd/mm.txt index 46a319e99..02de4e21a 100644 --- a/sys/netbsd/mm.txt +++ b/sys/netbsd/mm.txt @@ -7,7 +7,6 @@ include mmap(addr vma, len len[addr], prot flags[mmap_prot], flags flags[mmap_flags], fd fd, offset fileoff) vma munmap(addr vma, len len[addr]) mprotect(addr vma, len len[addr], prot flags[mmap_prot]) -msync(addr vma, len len[addr], f flags[msync_flags]) madvise(addr vma, len len[addr], advice flags[madvise_flags]) mlock(addr vma, size len[addr]) munlock(addr vma, size len[addr]) @@ -15,7 +14,6 @@ mlockall(flags flags[mlockall_flags]) munlockall() mmap_prot = PROT_EXEC, PROT_READ, PROT_WRITE, PROT_NONE -msync_flags = MS_ASYNC, MS_SYNC, MS_INVALIDATE mmap_flags = MAP_ANON, MAP_FILE, MAP_FIXED, MAP_HASSEMAPHORE, MAP_INHERIT, MAP_TRYFIXED, MAP_WIRED, MAP_PRIVATE, MAP_SHARED madvise_flags = MADV_NORMAL, MADV_RANDOM, MADV_SEQUENTIAL, MADV_WILLNEED, MADV_DONTNEED, MADV_FREE mlockall_flags = MCL_CURRENT, MCL_FUTURE diff --git a/sys/netbsd/mm_amd64.const b/sys/netbsd/mm_amd64.const new file mode 100644 index 000000000..7cffb10ce --- /dev/null +++ b/sys/netbsd/mm_amd64.const @@ -0,0 +1,30 @@ +# AUTOGENERATED FILE +MADV_DONTNEED = 4 +MADV_FREE = 6 +MADV_NORMAL = 0 +MADV_RANDOM = 1 +MADV_SEQUENTIAL = 2 +MADV_WILLNEED = 3 +MAP_ANON = 4096 +MAP_FILE = 0 +MAP_FIXED = 16 +MAP_HASSEMAPHORE = 512 +MAP_INHERIT = 128 +MAP_PRIVATE = 2 +MAP_SHARED = 1 +MAP_TRYFIXED = 1024 +MAP_WIRED = 2048 +MCL_CURRENT = 1 +MCL_FUTURE = 2 +PROT_EXEC = 4 +PROT_NONE = 0 +PROT_READ = 1 +PROT_WRITE = 2 +SYS_madvise = 75 +SYS_mlock = 203 +SYS_mlockall = 242 +SYS_mmap = 197 +SYS_mprotect = 74 +SYS_munlock = 204 +SYS_munlockall = 243 +SYS_munmap = 73 diff --git a/sys/netbsd/socket.txt b/sys/netbsd/socket.txt deleted file mode 100644 index 96943fe2b..000000000 --- a/sys/netbsd/socket.txt +++ /dev/null @@ -1,117 +0,0 @@ -# Copyright 2017 syzkaller project authors. All rights reserved. -# Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file. - -# TODO: due to autobind a socket can bind to port 0, that will result in a random port which is not reproducible - -include -include -include -include - -resource sock[fd] - -# TODO: describe socketcall syscall - -socket(domain flags[socket_domain], type flags[socket_type], proto int8) sock -socketpair(domain flags[socket_domain], type flags[socket_type], proto int8, fds ptr[out, pipefd]) -bind(fd sock, addr ptr[in, sockaddr_storage], addrlen len[addr]) -connect(fd sock, addr ptr[in, sockaddr_storage], addrlen len[addr]) -accept(fd sock, peer ptr[out, sockaddr_storage, opt], peerlen ptr[inout, len[peer, int32]]) sock -accept4(fd sock, peer ptr[out, sockaddr_storage, opt], peerlen ptr[inout, len[peer, int32]], flags flags[accept_flags]) sock -sendto(fd sock, buf buffer[in], len len[buf], f flags[send_flags], addr ptr[in, sockaddr_storage, opt], addrlen len[addr]) -recvfrom(fd sock, buf buffer[out], len len[buf], f flags[recv_flags], addr ptr[in, sockaddr_storage, opt], addrlen len[addr]) -getsockname(fd sock, addr ptr[out, sockaddr_storage], addrlen ptr[inout, len[addr, int32]]) -getpeername(fd sock, peer ptr[out, sockaddr_storage], peerlen ptr[inout, len[peer, int32]]) - -sendmsg(fd sock, msg ptr[in, send_msghdr], f flags[send_flags]) -recvmsg(fd sock, msg ptr[in, recv_msghdr], f flags[recv_flags]) - -listen(fd sock, backlog int32) -shutdown(fd sock, how flags[shutdown_flags]) - -getsockopt(fd sock, level int32, optname int32, optval buffer[out], optlen ptr[inout, len[optval, int32]]) -setsockopt(fd sock, level int32, optname int32, optval buffer[in], optlen len[optval]) - -socket_domain = AF_LOCAL, AF_INET, AF_INET6, AF_NS, AF_BLUETOOTH, AF_APPLETALK -socket_type = SOCK_STREAM, SOCK_DGRAM, SOCK_RAW, SOCK_RDM, SOCK_SEQPACKET, SOCK_NONBLOCK, SOCK_CLOEXEC, SOCK_NOSIGPIPE -accept_flags = SOCK_NONBLOCK, SOCK_CLOEXEC, SOCK_NOSIGPIPE -shutdown_flags = SHUT_RD, SHUT_WR, SHUT_RDWR -send_flags = MSG_OOB, MSG_PEEK, MSG_DONTROUTE, MSG_EOR, MSG_NOSIGNAL -recv_flags = MSG_CMSG_CLOEXEC, MSG_OOB, MSG_PEEK, MSG_WAITALL -cmsg_levels = SOL_SOCKET, IPPROTO_ICMP, LINUX_SOL_IP, LINUX_SOL_TCP, LINUX_SOL_UDP, LINUX_SOL_IPV6, LINUX_SOL_IPX, LINUX_SOL_AX25 - -# This sockaddr type corresponds to the struct sockaddr and is 16 bytes or less. -sockaddr [ -# AF_UNIX sockaddr in bigger than 16 bytes - in sockaddr_in - random array[int32, 4] -] - -# This sockaddr type corresponds to the sockaddr_storage type and is 128 bytes size. -sockaddr_storage [ - un sockaddr_un - in sockaddr_in - in6 sockaddr_in6 -] [varlen] - -sockaddr_generic { - sa_family flags[socket_domain, int16] - sa_data array[int8, 14] -} - -sockaddr_storage_generic { - sa_family flags[socket_domain, int16] - sa_data array[int8, 126] -} - -send_msghdr { - msg_name ptr[in, sockaddr_storage, opt] - msg_namelen len[msg_name, int32] - msg_iov ptr[in, array[iovec_in]] - msg_iovlen len[msg_iov, intptr] - msg_control ptr[in, array[cmsghdr]] - msg_controllen len[msg_control, intptr] - msg_flags flags[send_flags, int32] -} - -send_mmsghdr { - msg_hdr send_msghdr - msg_len int32 -} - -recv_msghdr { - msg_name ptr[out, sockaddr_storage, opt] - msg_namelen len[msg_name, int32] - msg_iov ptr[in, array[iovec_out]] - msg_iovlen len[msg_iov, intptr] - msg_control buffer[out] - msg_controllen len[msg_control, intptr] - msg_flags int32 -} - -recv_mmsghdr { - msg_hdr recv_msghdr - msg_len int32 -} - -cmsghdr { - cmsg_len len[parent, intptr] - cmsg_level flags[cmsg_levels, int32] - cmsg_type int32 - data array[int8] -} [align_ptr] - -# Socket options - -getsockopt$sock_int(fd sock, level const[SOL_SOCKET], optname flags[sockopt_opt_sock_int], optval ptr[out, int32], optlen ptr[inout, len[optval, int32]]) -setsockopt$sock_int(fd sock, level const[SOL_SOCKET], optname flags[sockopt_opt_sock_int], optval ptr[in, int32], optlen len[optval]) -getsockopt$sock_linger(fd sock, level const[SOL_SOCKET], optname const[SO_LINGER], optval ptr[out, linger], optlen ptr[inout, len[optval, int32]]) -setsockopt$sock_linger(fd sock, level const[SOL_SOCKET], optname const[SO_LINGER], optval ptr[in, linger], optlen len[optval]) -getsockopt$sock_cred(fd sock, level const[SOL_SOCKET], optname const[SO_PEERCRED], optval ptr[out, ucred], optlen ptr[inout, len[optval, int32]]) -setsockopt$sock_cred(fd sock, level const[SOL_SOCKET], optname const[SO_PEERCRED], optval ptr[in, ucred], optlen len[optval]) -getsockopt$sock_timeval(fd sock, level const[SOL_SOCKET], optname flags[sockopt_opt_sock_timeval], optval ptr[out, timeval], optlen ptr[inout, len[optval, int32]]) -setsockopt$sock_timeval(fd sock, level const[SOL_SOCKET], optname flags[sockopt_opt_sock_timeval], optval ptr[in, timeval], optlen len[optval]) -getsockopt$SO_PEERCRED(fd sock, level const[SOL_SOCKET], optname const[SO_PEERCRED], optval ptr[out, ucred], optlen len[optval]) - -sockopt_opt_sock_int = SO_DEBUG, SO_REUSEADDR, SO_REUSEPORT, SO_KEEPALIVE, SO_DONTROUTE, SO_LINGER, SO_BROADCAST, SO_OOBINLINE, SO_SNDBUF, SO_RCVBUF, SO_SNDLOWAT, SO_RCVLOWAT, SO_TIMESTAMP, SO_ACCEPTFILTER, SO_NOSIGPIPE, SO_TYPE, SO_ERROR -sockopt_opt_sock_timeval = SO_RCVTIMEO, SO_SNDTIMEO diff --git a/sys/sys.go b/sys/sys.go index 5b69648b2..6c7986296 100644 --- a/sys/sys.go +++ b/sys/sys.go @@ -8,6 +8,7 @@ import ( _ "github.com/google/syzkaller/sys/freebsd" _ "github.com/google/syzkaller/sys/fuchsia" _ "github.com/google/syzkaller/sys/linux" + _ "github.com/google/syzkaller/sys/netbsd" _ "github.com/google/syzkaller/sys/windows" ) diff --git a/sys/syz-extract/extract.go b/sys/syz-extract/extract.go index 0875b18aa..41ec1e1c9 100644 --- a/sys/syz-extract/extract.go +++ b/sys/syz-extract/extract.go @@ -55,6 +55,7 @@ var oses = map[string]OS{ "akaros": new(akaros), "linux": new(linux), "freebsd": new(freebsd), + "netbsd": new(netbsd), "android": new(linux), "fuchsia": new(fuchsia), "windows": new(windows), diff --git a/sys/syz-extract/netbsd.go b/sys/syz-extract/netbsd.go new file mode 100644 index 000000000..da9e4b4f0 --- /dev/null +++ b/sys/syz-extract/netbsd.go @@ -0,0 +1,74 @@ +// Copyright 2017 syzkaller project authors. All rights reserved. +// Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file. + +package main + +import ( + "fmt" + "os" + "path/filepath" + + "github.com/google/syzkaller/pkg/compiler" +) + +type netbsd struct{} + +func (*netbsd) prepare(sourcedir string, build bool, arches []string) error { + if sourcedir == "" { + return fmt.Errorf("provide path to kernel checkout via -sourcedir flag (or make extract SOURCEDIR)") + } + if !build { + return fmt.Errorf("netbsd requires -build flag") + } + return nil +} + +func (*netbsd) prepareArch(arch *Arch) error { + if err := os.Symlink(filepath.Join(arch.sourceDir, "sys", "arch", "amd64", "include"), + filepath.Join(arch.buildDir, "machine")); err != nil { + return fmt.Errorf("failed to create link: %v", err) + } + if err := os.Symlink(filepath.Join(arch.sourceDir, "sys", "arch", "x86", "include"), + filepath.Join(arch.buildDir, "x86")); err != nil { + return fmt.Errorf("failed to create link: %v", err) + } + return nil +} + +func (*netbsd) processFile(arch *Arch, info *compiler.ConstInfo) (map[string]uint64, map[string]bool, error) { + args := []string{ + "-fmessage-length=0", + "-nostdinc", + "-D_KERNEL", + "-D__BSD_VISIBLE=1", + "-I", filepath.Join(arch.sourceDir, "sys"), + "-I", filepath.Join(arch.sourceDir, "sys", "sys"), + "-I", filepath.Join(arch.sourceDir, "sys", "arch", "amd64"), + "-I", filepath.Join(arch.sourceDir, "common", "include"), + "-I", filepath.Join(arch.sourceDir, "sys", "compat", "linux", "common"), + "-I", arch.buildDir, + } + for _, incdir := range info.Incdirs { + args = append(args, "-I"+filepath.Join(arch.sourceDir, incdir)) + } + // Syscall consts on netbsd have weird prefixes sometimes, + // try to extract consts with these prefixes as well. + compatNames := make(map[string][]string) + for _, val := range info.Consts { + compat := "LINUX_" + val + compatNames[val] = append(compatNames[val], compat) + info.Consts = append(info.Consts, compat) + } + res, undeclared, err := extract(info, "gcc", args, "#include ") + for orig, compats := range compatNames { + for _, compat := range compats { + if undeclared[orig] && !undeclared[compat] { + res[orig] = res[compat] + delete(res, compat) + delete(undeclared, orig) + } + delete(undeclared, compat) + } + } + return res, undeclared, err +} diff --git a/sys/targets/targets.go b/sys/targets/targets.go index 6b5523f7d..48a46a6c6 100644 --- a/sys/targets/targets.go +++ b/sys/targets/targets.go @@ -89,6 +89,13 @@ var List = map[string]map[string]*Target{ CFlags: []string{"-m64"}, }, }, + "netbsd": map[string]*Target{ + "amd64": { + PtrSize: 8, + CArch: []string{"__x86_64__"}, + CFlags: []string{"-m64"}, + }, + }, "fuchsia": map[string]*Target{ "amd64": { PtrSize: 8, @@ -127,6 +134,12 @@ var oses = map[string]os{ ExecutorUsesShmem: true, ExecutorUsesForkServer: true, }, + "netbsd": { + SyscallNumbers: true, + SyscallPrefix: "SYS_", + ExecutorUsesShmem: true, + ExecutorUsesForkServer: true, + }, "fuchsia": { SyscallNumbers: false, ExecutorUsesShmem: false, -- cgit mrf-deployment