From c37c8bf05b3a5e72f9e220d4db34cd65276f4c0a Mon Sep 17 00:00:00 2001 From: Mark Johnston Date: Thu, 26 Mar 2020 15:16:16 -0400 Subject: sys/freebsd: add POSIX shared memory system calls --- executor/defs.h | 4 ++-- executor/syscalls.h | 8 ++++++++ sys/freebsd/gen/386.go | 29 ++++++++++++++++++++++++++++- sys/freebsd/gen/amd64.go | 29 ++++++++++++++++++++++++++++- sys/freebsd/ipc.txt | 13 +++++++++++-- sys/freebsd/ipc_386.const | 12 ++++++++++++ sys/freebsd/ipc_amd64.const | 12 ++++++++++++ 7 files changed, 101 insertions(+), 6 deletions(-) diff --git a/executor/defs.h b/executor/defs.h index 4069e573c..657364c2e 100644 --- a/executor/defs.h +++ b/executor/defs.h @@ -20,7 +20,7 @@ #if GOARCH_386 #define GOARCH "386" -#define SYZ_REVISION "9aa913dd00fd9a77ce8244e6e146d09fdad95e8f" +#define SYZ_REVISION "325e7f88c9a9be6d5408e8f4b16b46a7dfa46701" #define SYZ_EXECUTOR_USES_FORK_SERVER 1 #define SYZ_EXECUTOR_USES_SHMEM 1 #define SYZ_PAGE_SIZE 4096 @@ -30,7 +30,7 @@ #if GOARCH_amd64 #define GOARCH "amd64" -#define SYZ_REVISION "d6baa2c780ceca787d2bfc2b770607581ff9e055" +#define SYZ_REVISION "240c65c5b7b17b0d4a6d7365323733dd48fc9118" #define SYZ_EXECUTOR_USES_FORK_SERVER 1 #define SYZ_EXECUTOR_USES_SHMEM 1 #define SYZ_PAGE_SIZE 4096 diff --git a/executor/syscalls.h b/executor/syscalls.h index e58566d53..130d42ac6 100644 --- a/executor/syscalls.h +++ b/executor/syscalls.h @@ -297,6 +297,7 @@ const call_t syscalls[] = { {"freebsd11_mknod", 14}, {"freebsd11_mknodat", 498}, {"freebsd11_stat", 188}, + {"freebsd12_shm_open", 482}, {"fstat", 551}, {"fsync", 95}, {"ftruncate", 480}, @@ -687,6 +688,9 @@ const call_t syscalls[] = { {"setsockopt$sock_linger", 105}, {"setsockopt$sock_timeval", 105}, {"setuid", 23}, + {"shm_open2", 571}, + {"shm_rename", 572}, + {"shm_unlink", 483}, {"shmat", 228}, {"shmctl$IPC_INFO", 512}, {"shmctl$IPC_RMID", 512}, @@ -811,6 +815,7 @@ const call_t syscalls[] = { {"freebsd11_mknod", 14}, {"freebsd11_mknodat", 498}, {"freebsd11_stat", 188}, + {"freebsd12_shm_open", 482}, {"fstat", 551}, {"fsync", 95}, {"ftruncate", 480}, @@ -1201,6 +1206,9 @@ const call_t syscalls[] = { {"setsockopt$sock_linger", 105}, {"setsockopt$sock_timeval", 105}, {"setuid", 23}, + {"shm_open2", 571}, + {"shm_rename", 572}, + {"shm_unlink", 483}, {"shmat", 228}, {"shmctl$IPC_INFO", 512}, {"shmctl$IPC_RMID", 512}, diff --git a/sys/freebsd/gen/386.go b/sys/freebsd/gen/386.go index ea4fbb88e..8e15d3c9c 100644 --- a/sys/freebsd/gen/386.go +++ b/sys/freebsd/gen/386.go @@ -2126,6 +2126,11 @@ var syscalls_386 = []*Syscall{ &PtrType{TypeCommon{TypeName: "ptr", FldName: "file", TypeSize: 4}, &BufferType{TypeCommon: TypeCommon{TypeName: "filename", IsVarlen: true}, Kind: 3}}, &PtrType{TypeCommon{TypeName: "ptr", FldName: "statbuf", TypeSize: 4}, &StructType{Key: StructKey{"freebsd11_stat", 1}}}, }}, + {NR: 482, Name: "freebsd12_shm_open", CallName: "freebsd12_shm_open", Args: []Type{ + &PtrType{TypeCommon{TypeName: "ptr", FldName: "path", TypeSize: 4}, &BufferType{TypeCommon: TypeCommon{TypeName: "filename", IsVarlen: true}, Kind: 3}}, + &FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "shm_open_flags", FldName: "flags", TypeSize: 4}}, Vals: []uint64{0, 2, 512, 1024, 2048}}, + &FlagsType{IntTypeCommon{TypeCommon: TypeCommon{TypeName: "open_mode", FldName: "mode", TypeSize: 4}}, []uint64{1, 2, 4, 8, 16, 32, 64, 128, 256}, true}, + }}, {NR: 551, Name: "fstat", CallName: "fstat", Args: []Type{ &ResourceType{TypeCommon: TypeCommon{TypeName: "fd", FldName: "fd", TypeSize: 4}}, &PtrType{TypeCommon{TypeName: "ptr", FldName: "statbuf", TypeSize: 4}, &StructType{Key: StructKey{"stat", 1}}}, @@ -4523,6 +4528,21 @@ var syscalls_386 = []*Syscall{ {NR: 23, Name: "setuid", CallName: "setuid", Args: []Type{ &ResourceType{TypeCommon: TypeCommon{TypeName: "uid", FldName: "uid", TypeSize: 4}}, }}, + {NR: 571, Name: "shm_open2", CallName: "shm_open2", Args: []Type{ + &PtrType{TypeCommon{TypeName: "ptr", FldName: "path", TypeSize: 4}, &BufferType{TypeCommon: TypeCommon{TypeName: "filename", IsVarlen: true}, Kind: 3}}, + &FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "shm_open_flags", FldName: "flags", TypeSize: 4}}, Vals: []uint64{0, 2, 512, 1024, 2048}}, + &FlagsType{IntTypeCommon{TypeCommon: TypeCommon{TypeName: "open_mode", FldName: "mode", TypeSize: 4}}, []uint64{1, 2, 4, 8, 16, 32, 64, 128, 256}, true}, + &FlagsType{IntTypeCommon{TypeCommon: TypeCommon{TypeName: "shm_open2_flags", FldName: "shmflags", TypeSize: 4}}, []uint64{1}, true}, + &PtrType{TypeCommon{TypeName: "ptr", FldName: "name", TypeSize: 4}, &BufferType{TypeCommon: TypeCommon{TypeName: "string", IsVarlen: true}, Kind: 2}}, + }}, + {NR: 572, Name: "shm_rename", CallName: "shm_rename", Args: []Type{ + &PtrType{TypeCommon{TypeName: "ptr", FldName: "from", TypeSize: 4}, &BufferType{TypeCommon: TypeCommon{TypeName: "filename", IsVarlen: true}, Kind: 3}}, + &PtrType{TypeCommon{TypeName: "ptr", FldName: "to", TypeSize: 4}, &BufferType{TypeCommon: TypeCommon{TypeName: "filename", IsVarlen: true}, Kind: 3}}, + &FlagsType{IntTypeCommon{TypeCommon: TypeCommon{TypeName: "shm_rename_flags", FldName: "flags", TypeSize: 4}}, []uint64{1, 2}, true}, + }}, + {NR: 483, Name: "shm_unlink", CallName: "shm_unlink", Args: []Type{ + &PtrType{TypeCommon{TypeName: "ptr", FldName: "path", TypeSize: 4}, &BufferType{TypeCommon: TypeCommon{TypeName: "filename", IsVarlen: true}, Kind: 3}}, + }}, {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: 4}}, @@ -5531,9 +5551,12 @@ var consts_386 = []ConstValue{ {"SF_SNAPSHOT", 2097152}, {"SF_SYNC", 4}, {"SF_USER_READAHEAD", 8}, + {"SHM_ALLOW_SEALING", 1}, {"SHM_INFO", 14}, {"SHM_LOCK", 11}, {"SHM_RDONLY", 4096}, + {"SHM_RENAME_EXCHANGE", 2}, + {"SHM_RENAME_NOREPLACE", 1}, {"SHM_RND", 8192}, {"SHM_STAT", 13}, {"SHM_UNLOCK", 12}, @@ -5630,6 +5653,7 @@ var consts_386 = []ConstValue{ {"SYS_freebsd11_mknod", 14}, {"SYS_freebsd11_mknodat", 498}, {"SYS_freebsd11_stat", 188}, + {"SYS_freebsd12_shm_open", 482}, {"SYS_fstat", 551}, {"SYS_fsync", 95}, {"SYS_ftruncate", 480}, @@ -5712,6 +5736,9 @@ var consts_386 = []ConstValue{ {"SYS_setrlimit", 195}, {"SYS_setsockopt", 105}, {"SYS_setuid", 23}, + {"SYS_shm_open2", 571}, + {"SYS_shm_rename", 572}, + {"SYS_shm_unlink", 483}, {"SYS_shmat", 228}, {"SYS_shmctl", 512}, {"SYS_shmdt", 230}, @@ -5810,4 +5837,4 @@ var consts_386 = []ConstValue{ {"WUNTRACED", 2}, } -const revision_386 = "9aa913dd00fd9a77ce8244e6e146d09fdad95e8f" +const revision_386 = "325e7f88c9a9be6d5408e8f4b16b46a7dfa46701" diff --git a/sys/freebsd/gen/amd64.go b/sys/freebsd/gen/amd64.go index 48dc844be..cee4a22fd 100644 --- a/sys/freebsd/gen/amd64.go +++ b/sys/freebsd/gen/amd64.go @@ -2153,6 +2153,11 @@ var syscalls_amd64 = []*Syscall{ &PtrType{TypeCommon{TypeName: "ptr", FldName: "file", TypeSize: 8}, &BufferType{TypeCommon: TypeCommon{TypeName: "filename", IsVarlen: true}, Kind: 3}}, &PtrType{TypeCommon{TypeName: "ptr", FldName: "statbuf", TypeSize: 8}, &StructType{Key: StructKey{"freebsd11_stat", 1}}}, }}, + {NR: 482, Name: "freebsd12_shm_open", CallName: "freebsd12_shm_open", Args: []Type{ + &PtrType{TypeCommon{TypeName: "ptr", FldName: "path", TypeSize: 8}, &BufferType{TypeCommon: TypeCommon{TypeName: "filename", IsVarlen: true}, Kind: 3}}, + &FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "shm_open_flags", FldName: "flags", TypeSize: 8}}, Vals: []uint64{0, 2, 512, 1024, 2048}}, + &FlagsType{IntTypeCommon{TypeCommon: TypeCommon{TypeName: "open_mode", FldName: "mode", TypeSize: 8}}, []uint64{1, 2, 4, 8, 16, 32, 64, 128, 256}, true}, + }}, {NR: 551, Name: "fstat", CallName: "fstat", Args: []Type{ &ResourceType{TypeCommon: TypeCommon{TypeName: "fd", FldName: "fd", TypeSize: 4}}, &PtrType{TypeCommon{TypeName: "ptr", FldName: "statbuf", TypeSize: 8}, &StructType{Key: StructKey{"stat", 1}}}, @@ -4550,6 +4555,21 @@ var syscalls_amd64 = []*Syscall{ {NR: 23, Name: "setuid", CallName: "setuid", Args: []Type{ &ResourceType{TypeCommon: TypeCommon{TypeName: "uid", FldName: "uid", TypeSize: 4}}, }}, + {NR: 571, Name: "shm_open2", CallName: "shm_open2", Args: []Type{ + &PtrType{TypeCommon{TypeName: "ptr", FldName: "path", TypeSize: 8}, &BufferType{TypeCommon: TypeCommon{TypeName: "filename", IsVarlen: true}, Kind: 3}}, + &FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "shm_open_flags", FldName: "flags", TypeSize: 8}}, Vals: []uint64{0, 2, 512, 1024, 2048}}, + &FlagsType{IntTypeCommon{TypeCommon: TypeCommon{TypeName: "open_mode", FldName: "mode", TypeSize: 8}}, []uint64{1, 2, 4, 8, 16, 32, 64, 128, 256}, true}, + &FlagsType{IntTypeCommon{TypeCommon: TypeCommon{TypeName: "shm_open2_flags", FldName: "shmflags", TypeSize: 8}}, []uint64{1}, true}, + &PtrType{TypeCommon{TypeName: "ptr", FldName: "name", TypeSize: 8}, &BufferType{TypeCommon: TypeCommon{TypeName: "string", IsVarlen: true}, Kind: 2}}, + }}, + {NR: 572, Name: "shm_rename", CallName: "shm_rename", Args: []Type{ + &PtrType{TypeCommon{TypeName: "ptr", FldName: "from", TypeSize: 8}, &BufferType{TypeCommon: TypeCommon{TypeName: "filename", IsVarlen: true}, Kind: 3}}, + &PtrType{TypeCommon{TypeName: "ptr", FldName: "to", TypeSize: 8}, &BufferType{TypeCommon: TypeCommon{TypeName: "filename", IsVarlen: true}, Kind: 3}}, + &FlagsType{IntTypeCommon{TypeCommon: TypeCommon{TypeName: "shm_rename_flags", FldName: "flags", TypeSize: 8}}, []uint64{1, 2}, true}, + }}, + {NR: 483, Name: "shm_unlink", CallName: "shm_unlink", Args: []Type{ + &PtrType{TypeCommon{TypeName: "ptr", FldName: "path", TypeSize: 8}, &BufferType{TypeCommon: TypeCommon{TypeName: "filename", IsVarlen: true}, Kind: 3}}, + }}, {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}}, @@ -5558,9 +5578,12 @@ var consts_amd64 = []ConstValue{ {"SF_SNAPSHOT", 2097152}, {"SF_SYNC", 4}, {"SF_USER_READAHEAD", 8}, + {"SHM_ALLOW_SEALING", 1}, {"SHM_INFO", 14}, {"SHM_LOCK", 11}, {"SHM_RDONLY", 4096}, + {"SHM_RENAME_EXCHANGE", 2}, + {"SHM_RENAME_NOREPLACE", 1}, {"SHM_RND", 8192}, {"SHM_STAT", 13}, {"SHM_UNLOCK", 12}, @@ -5657,6 +5680,7 @@ var consts_amd64 = []ConstValue{ {"SYS_freebsd11_mknod", 14}, {"SYS_freebsd11_mknodat", 498}, {"SYS_freebsd11_stat", 188}, + {"SYS_freebsd12_shm_open", 482}, {"SYS_fstat", 551}, {"SYS_fsync", 95}, {"SYS_ftruncate", 480}, @@ -5739,6 +5763,9 @@ var consts_amd64 = []ConstValue{ {"SYS_setrlimit", 195}, {"SYS_setsockopt", 105}, {"SYS_setuid", 23}, + {"SYS_shm_open2", 571}, + {"SYS_shm_rename", 572}, + {"SYS_shm_unlink", 483}, {"SYS_shmat", 228}, {"SYS_shmctl", 512}, {"SYS_shmdt", 230}, @@ -5837,4 +5864,4 @@ var consts_amd64 = []ConstValue{ {"WUNTRACED", 2}, } -const revision_amd64 = "d6baa2c780ceca787d2bfc2b770607581ff9e055" +const revision_amd64 = "240c65c5b7b17b0d4a6d7365323733dd48fc9118" diff --git a/sys/freebsd/ipc.txt b/sys/freebsd/ipc.txt index 5c43925df..fc94c3033 100644 --- a/sys/freebsd/ipc.txt +++ b/sys/freebsd/ipc.txt @@ -3,11 +3,12 @@ include include -include include -include +include include include +include +include resource ipc[int32]: 0, 0xffffffffffffffff @@ -60,6 +61,11 @@ shmctl$SHM_LOCK(shmid ipc_shm, cmd const[SHM_LOCK]) shmctl$SHM_UNLOCK(shmid ipc_shm, cmd const[SHM_UNLOCK]) shmdt(addr shmaddr) +freebsd12_shm_open(path ptr[in, filename], flags flags[shm_open_flags], mode flags[open_mode]) +shm_open2(path ptr[in, filename], flags flags[shm_open_flags], mode flags[open_mode], shmflags flags[shm_open2_flags], name ptr[in, string]) +shm_rename(from ptr[in, filename], to ptr[in, filename], flags flags[shm_rename_flags]) +shm_unlink(path ptr[in, filename]) + msgget_flags = IPC_CREAT, IPC_EXCL, S_IRUSR, S_IWUSR, S_IXUSR, S_IRGRP, S_IWGRP, S_IXGRP, S_IROTH, S_IWOTH, S_IXOTH msgbuf_type = 0, 1, 2, 3 msgsnd_flags = IPC_NOWAIT @@ -69,6 +75,9 @@ semop_flags = IPC_NOWAIT, SEM_UNDO sem_sem_id = 0, 1, 2, 3, 4 shmget_flags = IPC_CREAT, IPC_EXCL, S_IRUSR, S_IWUSR, S_IXUSR, S_IRGRP, S_IWGRP, S_IXGRP, S_IROTH, S_IWOTH, S_IXOTH shmat_flags = SHM_RND, SHM_RDONLY +shm_open_flags = O_RDONLY, O_RDWR, O_CREAT, O_EXCL, O_TRUNC +shm_open2_flags = SHM_ALLOW_SEALING +shm_rename_flags = SHM_RENAME_EXCHANGE, SHM_RENAME_NOREPLACE ipc_perm { key int32 diff --git a/sys/freebsd/ipc_386.const b/sys/freebsd/ipc_386.const index 4d1480b2e..698aad428 100644 --- a/sys/freebsd/ipc_386.const +++ b/sys/freebsd/ipc_386.const @@ -13,24 +13,36 @@ IPC_RMID = 0 IPC_SET = 1 IPC_STAT = 2 MSG_NOERROR = 4096 +O_CREAT = 512 +O_EXCL = 2048 +O_RDONLY = 0 +O_RDWR = 2 +O_TRUNC = 1024 SEM_INFO = 11 SEM_STAT = 10 SEM_UNDO = 4096 SETALL = 9 SETVAL = 8 +SHM_ALLOW_SEALING = 1 SHM_INFO = 14 SHM_LOCK = 11 SHM_RDONLY = 4096 +SHM_RENAME_EXCHANGE = 2 +SHM_RENAME_NOREPLACE = 1 SHM_RND = 8192 SHM_STAT = 13 SHM_UNLOCK = 12 SYS___semctl = 510 +SYS_freebsd12_shm_open = 482 SYS_msgctl = 511 SYS_msgget = 225 SYS_msgrcv = 227 SYS_msgsnd = 226 SYS_semget = 221 SYS_semop = 222 +SYS_shm_open2 = 571 +SYS_shm_rename = 572 +SYS_shm_unlink = 483 SYS_shmat = 228 SYS_shmctl = 512 SYS_shmdt = 230 diff --git a/sys/freebsd/ipc_amd64.const b/sys/freebsd/ipc_amd64.const index 4d1480b2e..698aad428 100644 --- a/sys/freebsd/ipc_amd64.const +++ b/sys/freebsd/ipc_amd64.const @@ -13,24 +13,36 @@ IPC_RMID = 0 IPC_SET = 1 IPC_STAT = 2 MSG_NOERROR = 4096 +O_CREAT = 512 +O_EXCL = 2048 +O_RDONLY = 0 +O_RDWR = 2 +O_TRUNC = 1024 SEM_INFO = 11 SEM_STAT = 10 SEM_UNDO = 4096 SETALL = 9 SETVAL = 8 +SHM_ALLOW_SEALING = 1 SHM_INFO = 14 SHM_LOCK = 11 SHM_RDONLY = 4096 +SHM_RENAME_EXCHANGE = 2 +SHM_RENAME_NOREPLACE = 1 SHM_RND = 8192 SHM_STAT = 13 SHM_UNLOCK = 12 SYS___semctl = 510 +SYS_freebsd12_shm_open = 482 SYS_msgctl = 511 SYS_msgget = 225 SYS_msgrcv = 227 SYS_msgsnd = 226 SYS_semget = 221 SYS_semop = 222 +SYS_shm_open2 = 571 +SYS_shm_rename = 572 +SYS_shm_unlink = 483 SYS_shmat = 228 SYS_shmctl = 512 SYS_shmdt = 230 -- cgit mrf-deployment