Home | History | Annotate | Download | only in linux
      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 
      4 # AF_UNIX support.
      5 
      6 include <linux/socket.h>
      7 include <linux/net.h>
      8 include <uapi/linux/un.h>
      9 
     10 resource sock_unix[sock]
     11 
     12 socket$unix(domain const[AF_UNIX], type flags[unix_socket_type], proto const[0]) sock_unix
     13 socketpair$unix(domain const[AF_UNIX], type flags[unix_socket_type], proto const[0], fds ptr[out, unix_pair])
     14 bind$unix(fd sock_unix, addr ptr[in, sockaddr_un], addrlen len[addr])
     15 connect$unix(fd sock_unix, addr ptr[in, sockaddr_un], addrlen len[addr])
     16 accept$unix(fd sock_unix, peer ptr[out, sockaddr_un, opt], peerlen ptr[inout, len[peer, int32]]) sock_unix
     17 accept4$unix(fd sock_unix, peer ptr[out, sockaddr_un, opt], peerlen ptr[inout, len[peer, int32]], flags flags[accept_flags]) sock_unix
     18 
     19 sendto$unix(fd sock_unix, buf buffer[in], len len[buf], f flags[send_flags], addr ptr[in, sockaddr_un, opt], addrlen len[addr])
     20 sendmsg$unix(fd sock_unix, msg ptr[in, msghdr_un], f flags[send_flags])
     21 sendmmsg$unix(fd sock_unix, mmsg ptr[in, array[msghdr_un]], vlen len[mmsg], f flags[send_flags])
     22 recvfrom$unix(fd sock_unix, buf buffer[out], len len[buf], f flags[recv_flags], addr ptr[in, sockaddr_un, opt], addrlen len[addr])
     23 getsockname$unix(fd sock_unix, addr ptr[out, sockaddr_un], addrlen ptr[inout, len[addr, int32]])
     24 getpeername$unix(fd sock_unix, peer ptr[out, sockaddr_un], peerlen ptr[inout, len[peer, int32]])
     25 
     26 unix_socket_type = SOCK_STREAM, SOCK_DGRAM, SOCK_SEQPACKET
     27 unix_socket_family = AF_UNIX, AF_UNSPEC
     28 
     29 unix_pair {
     30 	fd0	sock_unix
     31 	fd1	sock_unix
     32 }
     33 
     34 sockaddr_un [
     35 	file	sockaddr_un_file
     36 	abs	sockaddr_un_abstract
     37 ]
     38 
     39 sockaddr_un_file {
     40 	family	flags[unix_socket_family, int16]
     41 	path	string[filename, UNIX_PATH_MAX]
     42 }
     43 
     44 sockaddr_un_abstract {
     45 	family	flags[unix_socket_family, int16]
     46 	ind	const[0, int8]
     47 	id	int32[20000:20004]
     48 }
     49 
     50 msghdr_un {
     51 	addr	ptr[in, sockaddr_un]
     52 	addrlen	len[addr, int32]
     53 	vec	ptr[in, array[iovec_in]]
     54 	vlen	len[vec, intptr]
     55 	ctrl	ptr[in, array[cmsghdr_un], opt]
     56 	ctrllen	bytesize[ctrl, intptr]
     57 	f	flags[send_flags, int32]
     58 }
     59 
     60 cmsghdr_un [
     61 	rights	cmsghdr_un_rights
     62 	cred	cmsghdr_un_cred
     63 ] [varlen]
     64 
     65 cmsghdr_un_rights {
     66 	len	len[parent, intptr]
     67 	level	const[SOL_SOCKET, int32]
     68 	type	const[SCM_RIGHTS, int32]
     69 	fds	array[fd]
     70 } [align_ptr]
     71 
     72 cmsghdr_un_cred {
     73 	len	len[parent, intptr]
     74 	level	const[SOL_SOCKET, int32]
     75 	type	const[SCM_CREDENTIALS, int32]
     76 	pid	pid
     77 	uid	uid
     78 	gid	gid
     79 } [align_ptr]
     80