1# Copyright 2017 syzkaller project authors. All rights reserved. 2# Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file. 3 4include <sys/types.h> 5include <sys/fcntl.h> 6include <sys/stat.h> 7include <sys/ipc.h> 8include <sys/shm.h> 9include <sys/msg.h> 10include <sys/sem.h> 11 12resource ipc[int32]: 0, 0xffffffffffffffff 13 14# TODO: describe ipc syscall 15 16define SYS____semctl50 442 17 18resource ipc_msq[ipc] 19msgget(key proc[2039379027, 4], flags flags[msgget_flags]) ipc_msq 20msgget$private(key const[IPC_PRIVATE], flags flags[msgget_flags]) ipc_msq 21msgsnd(msqid ipc_msq, msgp ptr[in, msgbuf], sz len[msgp], flags flags[msgsnd_flags]) 22msgrcv(msqid ipc_msq, msgp ptr[out, msgbuf], sz len[msgp], typ flags[msgbuf_type], flags flags[msgrcv_flags]) 23msgctl$IPC_STAT(msqid ipc_msq, cmd const[IPC_STAT], buf buffer[out]) 24msgctl$IPC_SET(msqid ipc_msq, cmd const[IPC_SET], buf ptr[in, msqid_ds]) 25msgctl$IPC_RMID(msqid ipc_msq, cmd const[IPC_RMID]) 26 27resource ipc_sem[ipc] 28semget(key proc[2039359027, 4], nsems flags[sem_sem_id], flags flags[semget_flags]) ipc_sem 29semget$private(key const[IPC_PRIVATE], nsems flags[sem_sem_id], flags flags[semget_flags]) ipc_sem 30semop(semid ipc_sem, ops ptr[in, array[sembuf]], nops len[ops]) 31semctl$IPC_STAT(semid ipc_sem, semnum const[0], cmd const[IPC_STAT], arg buffer[out]) 32semctl$IPC_SET(semid ipc_sem, semnum const[0], cmd const[IPC_SET], arg ptr[in, semid_ds]) 33semctl$IPC_RMID(semid ipc_sem, semnum const[0], cmd const[IPC_RMID]) 34semctl$GETALL(semid ipc_sem, semnum const[0], cmd const[GETALL], arg buffer[out]) 35semctl$GETNCNT(semid ipc_sem, semnum flags[sem_sem_id], cmd const[GETNCNT], arg buffer[out]) 36semctl$GETPID(semid ipc_sem, semnum flags[sem_sem_id], cmd const[GETPID], arg buffer[out]) 37semctl$GETVAL(semid ipc_sem, semnum flags[sem_sem_id], cmd const[GETVAL], arg buffer[out]) 38semctl$GETZCNT(semid ipc_sem, semnum flags[sem_sem_id], cmd const[GETZCNT], arg buffer[out]) 39semctl$SETALL(semid ipc_sem, semnum const[0], cmd const[SETALL], arg ptr[in, array[int16]]) 40semctl$SETVAL(semid ipc_sem, semnum flags[sem_sem_id], cmd const[SETVAL], arg ptr[in, int32]) 41 42resource ipc_shm[ipc] 43resource shmaddr[intptr]: 0 44# The unused arg is unused by syscall (does not exist at all), 45# but it helps to generate sane size values. 46shmget(key proc[2039339027, 4], size len[unused], flags flags[shmget_flags], unused vma) ipc_shm 47shmget$private(key const[IPC_PRIVATE], size len[unused], flags flags[shmget_flags], unused vma) ipc_shm 48shmat(shmid ipc_shm, addr vma, flags flags[shmat_flags]) shmaddr 49shmctl$IPC_STAT(shmid ipc_shm, cmd const[IPC_STAT], buf buffer[out]) 50shmctl$IPC_SET(shmid ipc_shm, cmd const[IPC_SET], buf ptr[in, shmid_ds]) 51shmctl$IPC_RMID(shmid ipc_shm, cmd const[IPC_RMID]) 52shmctl$SHM_LOCK(shmid ipc_shm, cmd const[SHM_LOCK]) 53shmctl$SHM_UNLOCK(shmid ipc_shm, cmd const[SHM_UNLOCK]) 54shmdt(addr shmaddr) 55 56msgget_flags = IPC_CREAT, IPC_EXCL, S_IRUSR, S_IWUSR, S_IXUSR, S_IRGRP, S_IWGRP, S_IXGRP, S_IROTH, S_IWOTH, S_IXOTH 57msgbuf_type = 0, 1, 2, 3 58msgsnd_flags = IPC_NOWAIT 59msgrcv_flags = IPC_NOWAIT, MSG_NOERROR 60semget_flags = IPC_CREAT, IPC_EXCL, S_IRUSR, S_IWUSR, S_IXUSR, S_IRGRP, S_IWGRP, S_IXGRP, S_IROTH, S_IWOTH, S_IXOTH 61semop_flags = IPC_NOWAIT, SEM_UNDO 62sem_sem_id = 0, 1, 2, 3, 4 63shmget_flags = IPC_CREAT, IPC_EXCL, S_IRUSR, S_IWUSR, S_IXUSR, S_IRGRP, S_IWGRP, S_IXGRP, S_IROTH, S_IWOTH, S_IXOTH 64shmat_flags = SHM_RND, SHM_RDONLY 65 66ipc_perm { 67 key int32 68 uid uid 69 gid gid 70 cuid uid 71 cgid gid 72 mode flags[open_mode, int32] 73 seq int16 74 pad0 const[0, int16] 75 pad1 const[0, intptr] 76 pad2 const[0, intptr] 77} 78 79msqid_ds { 80 perm ipc_perm 81 qnum intptr 82 qbytes intptr 83 lspid pid 84 lrpid pid 85 stime intptr 86 rtime intptr 87 ctime intptr 88 cbytes intptr 89 pad0 const[0, intptr] 90 pad1 const[0, intptr] 91} 92 93shmid_ds { 94 perm ipc_perm 95 segsz int32 96 nattch int16 97 cpid pid 98 lpid pid 99 atime intptr 100 dtime intptr 101 ctime intptr 102 unused0 const[0, int16] 103 unused1 const[0, intptr] 104 unused2 const[0, intptr] 105} 106 107semid_ds { 108 perm ipc_perm 109 otime intptr 110 ctime intptr 111 nsems intptr 112 pad0 const[0, intptr] 113 pad1 const[0, intptr] 114} 115 116sembuf { 117 num flags[sem_sem_id, int16] 118 op int16 119 flg flags[semop_flags, int16] 120} 121 122msgbuf { 123 typ flags[msgbuf_type, intptr] 124 data array[int8] 125} [packed] 126