diff options
| author | Mark Johnston <markjdb@gmail.com> | 2021-05-15 13:20:50 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-05-15 19:20:50 +0200 |
| commit | f54a5c0916af7d798b204eb70c484f154d69e0a3 (patch) | |
| tree | 384a352cf53d4feb3ec1168f88766ca20b6b0128 /sys | |
| parent | 93f844de48fff3f13271ec9e3fc2f5abf7692424 (diff) | |
sys/freebsd: fix some problems with SysV semaphore definitions (#2588)
- There is no __semctl(SEM_INFO).
- The fields in semid_ds and ipc_perm were wrong.
- The last parameter for many of the operations was specified
incorrectly.
The last problem resulted in occasional SYZFAILs when IPC_STAT is used
since the output region doesn't get set up properly and in some cases
can cause kcov data to be overwritten.
Diffstat (limited to 'sys')
| -rw-r--r-- | sys/freebsd/ipc.txt | 43 | ||||
| -rw-r--r-- | sys/freebsd/ipc.txt.const | 1 |
2 files changed, 20 insertions, 24 deletions
diff --git a/sys/freebsd/ipc.txt b/sys/freebsd/ipc.txt index fc6876bfd..5d7f8fadc 100644 --- a/sys/freebsd/ipc.txt +++ b/sys/freebsd/ipc.txt @@ -36,19 +36,17 @@ semop(semid ipc_sem, ops ptr[in, array[sembuf]], nops len[ops]) # Since we don't have strict const enforcement, we need to apply it to all variants. # When/if we have stricter enforcement of arguments for syscall variants, we may remove some of the attributes. -__semctl$IPC_STAT(semid ipc_sem, semnum const[0], cmd const[IPC_STAT], arg buffer[out]) (ignore_return) -__semctl$IPC_SET(semid ipc_sem, semnum const[0], cmd const[IPC_SET], arg ptr[in, semid_ds]) (ignore_return) +__semctl$IPC_STAT(semid ipc_sem, semnum const[0], cmd const[IPC_STAT], arg ptr[in, ptr[out, semid_ds]]) (ignore_return) +__semctl$IPC_SET(semid ipc_sem, semnum const[0], cmd const[IPC_SET], arg ptr[in, ptr[in, semid_ds]]) (ignore_return) __semctl$IPC_RMID(semid ipc_sem, semnum const[0], cmd const[IPC_RMID]) (ignore_return) -__semctl$IPC_INFO(semid ipc_sem, semnum flags[sem_sem_id], cmd const[IPC_INFO], buf buffer[out]) (ignore_return) -__semctl$SEM_INFO(semid ipc_sem, semnum flags[sem_sem_id], cmd const[SEM_INFO], arg buffer[out]) (ignore_return) -__semctl$SEM_STAT(semid ipc_sem, semnum flags[sem_sem_id], cmd const[SEM_STAT], arg buffer[out]) (ignore_return) -__semctl$GETALL(semid ipc_sem, semnum const[0], cmd const[GETALL], arg buffer[out]) (ignore_return) -__semctl$GETNCNT(semid ipc_sem, semnum flags[sem_sem_id], cmd const[GETNCNT], arg buffer[out]) (ignore_return) -__semctl$GETPID(semid ipc_sem, semnum flags[sem_sem_id], cmd const[GETPID], arg buffer[out]) (ignore_return) -__semctl$GETVAL(semid ipc_sem, semnum flags[sem_sem_id], cmd const[GETVAL], arg buffer[out]) (ignore_return) -__semctl$GETZCNT(semid ipc_sem, semnum flags[sem_sem_id], cmd const[GETZCNT], arg buffer[out]) (ignore_return) +__semctl$SEM_STAT(semid ipc_sem, semnum flags[sem_sem_id], cmd const[SEM_STAT], arg ptr[in, ptr[out, semid_ds]]) (ignore_return) +__semctl$GETALL(semid ipc_sem, semnum const[0], cmd const[GETALL], arg ptr[in, array[int16]]) (ignore_return) +__semctl$GETNCNT(semid ipc_sem, semnum flags[sem_sem_id], cmd const[GETNCNT]) (ignore_return) +__semctl$GETZCNT(semid ipc_sem, semnum flags[sem_sem_id], cmd const[GETZCNT]) (ignore_return) +__semctl$GETPID(semid ipc_sem, semnum flags[sem_sem_id], cmd const[GETPID]) (ignore_return) +__semctl$GETVAL(semid ipc_sem, semnum flags[sem_sem_id], cmd const[GETVAL]) (ignore_return) __semctl$SETALL(semid ipc_sem, semnum const[0], cmd const[SETALL], arg ptr[in, array[int16]]) (ignore_return) -__semctl$SETVAL(semid ipc_sem, semnum flags[sem_sem_id], cmd const[SETVAL], arg ptr[in, int32]) (ignore_return) +__semctl$SETVAL(semid ipc_sem, semnum flags[sem_sem_id], cmd const[SETVAL], arg ptr[in, ptr[in, int32]]) (ignore_return) resource ipc_shm[ipc] resource shmaddr[intptr]: 0 @@ -97,16 +95,14 @@ shm_open2_flags = SHM_ALLOW_SEALING, SHM_GROW_ON_WRITE, SHM_LARGEPAGE shm_rename_flags = SHM_RENAME_EXCHANGE, SHM_RENAME_NOREPLACE ipc_perm { - key int32 - uid uid - gid gid cuid uid cgid gid - mode flags[open_mode, int32] + uid uid + gid gid + mode flags[open_mode, int16] seq int16 - pad0 const[0, int16] - pad1 const[0, intptr] - pad2 const[0, intptr] + pad0 const[0, int32] + key intptr } msqid_ds { @@ -139,11 +135,12 @@ shmid_ds { semid_ds { perm ipc_perm - otime intptr - ctime intptr - nsems intptr - pad0 const[0, intptr] - pad1 const[0, intptr] + base intptr + nsems int16 + pad0 const[0, int16] + pad1 const[0, int32] + otime int64 + ctime int64 } sembuf { diff --git a/sys/freebsd/ipc.txt.const b/sys/freebsd/ipc.txt.const index 57386860e..14bc65137 100644 --- a/sys/freebsd/ipc.txt.const +++ b/sys/freebsd/ipc.txt.const @@ -21,7 +21,6 @@ O_EXCL = 2048 O_RDONLY = 0 O_RDWR = 2 O_TRUNC = 1024 -SEM_INFO = 11 SEM_STAT = 10 SEM_UNDO = 4096 SETALL = 9 |
