aboutsummaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2016-06-13 12:44:11 +0200
committerGitHub <noreply@github.com>2016-06-13 12:44:11 +0200
commit8effb6d4b38ccb8cacd419c544d41b6f80f392ef (patch)
tree01262826604e0296f040aa9c9e598fd9f1bebcf5 /sys
parent15efba6eff38efc26a76f3c7829ae2ccca27ac7e (diff)
parent1dbfdcf75749205d52b1aaacf59b2e66b3edaf63 (diff)
Merge pull request #40 from sploving/master
support getsockopt for sctp and also support kcm and netrom
Diffstat (limited to 'sys')
-rw-r--r--sys/decl.go5
-rwxr-xr-xsys/kcm.txt29
-rwxr-xr-xsys/netrom.txt62
-rwxr-xr-x[-rw-r--r--]sys/sctp.txt97
4 files changed, 192 insertions, 1 deletions
diff --git a/sys/decl.go b/sys/decl.go
index 0705f0629..8115a1d6c 100644
--- a/sys/decl.go
+++ b/sys/decl.go
@@ -114,6 +114,8 @@ const (
FdInputEvent
FdTun
FdRandom
+ FdKcm
+ FdNetRom
IPCMsq
IPCSem
@@ -143,7 +145,8 @@ func ResourceSubkinds(kind ResourceKind) []ResourceSubkind {
FdDRI, FdFuse, FdKdbus, FdBpfMap, FdBpfProg, FdPerf, FdUserFault,
FdAlg, FdAlgConn, FdNfcRaw, FdNfcLlcp, FdBtHci, FdBtSco, FdBtL2cap,
FdBtRfcomm, FdBtHidp, FdBtCmtp, FdBtBnep, FdUnix, FdSctp, FdNetlink, FdKvm, FdKvmVm,
- FdKvmCpu, FdSndSeq, FdSndTimer, FdSndControl, FdInputEvent, FdTun, FdRandom}
+ FdKvmCpu, FdSndSeq, FdSndTimer, FdSndControl, FdInputEvent, FdTun, FdRandom, FdKcm,
+ FdNetRom}
case ResIPC:
return []ResourceSubkind{IPCMsq, IPCSem, IPCShm}
case ResIOCtx, ResKey, ResInotifyDesc, ResPid, ResUid, ResGid, ResTimerid, ResIocbPtr, ResDrmCtx:
diff --git a/sys/kcm.txt b/sys/kcm.txt
new file mode 100755
index 000000000..c4e603d77
--- /dev/null
+++ b/sys/kcm.txt
@@ -0,0 +1,29 @@
+# Copyright 2016 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.
+
+include <linux/kcm.h>
+
+socket$kcm(domain const[AF_KCM], type flags[kcm_socket_type], proto const[KCMPROTO_CONNECTED]) fd[kcm]
+setsockopt$KCM_RECV_DISABLE(fd fd[kcm], level const[SOL_KCM], opt const[KCM_RECV_DISABLE], val ptr[in, int32], len len[val])
+getsockopt$KCM_RECV_DISABLE(fd fd[kcm], level const[SOL_KCM], opt const[KCM_RECV_DISABLE], val ptr[out, int32], len len[val])
+sendmsg$kcm(fd fd[kcm], msg ptr[in, send_msghdr], f flags[send_flags])
+recvmsg$kcm(fd fd[kcm], msg ptr[in, recv_msghdr], f flags[recv_flags])
+
+ioctl$SIOCKCMATTACH(fd fd[kcm], cmd const[SIOCKCMATTACH], arg ptr[in, kcm_attach])
+ioctl$SIOCKCMUNATTACH(fd fd[kcm], cmd const[SIOCKCMUNATTACH], arg ptr[in, kcm_unattach])
+ioctl$SIOCKCMCLONE(fd fd[kcm], cmd const[SIOCKCMCLONE], arg ptr[inout, kcm_clone])
+
+kcm_socket_type = SOCK_DGRAM, SOCK_SEQPACKET
+
+kcm_attach {
+ fd fd[sock]
+ bpf_fd int32
+}
+
+kcm_unattach {
+ fd fd[sock]
+}
+
+kcm_clone {
+ fd fd[sock]
+}
diff --git a/sys/netrom.txt b/sys/netrom.txt
new file mode 100755
index 000000000..630a6dbbb
--- /dev/null
+++ b/sys/netrom.txt
@@ -0,0 +1,62 @@
+# Copyright 2016 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.
+
+include <linux/netrom.h>
+
+socket$netrom(domain const[AF_NETROM], type const[SOCK_SEQPACKET], proto const[0]) fd[netrom]
+bind$netrom(fd fd[netrom], addr ptr[in, sockaddr_netrom], addrlen len[addr])
+connect$netrom(fd fd[netrom], addr ptr[in, sockaddr_netrom], addrlen len[addr])
+accept$netrom(fd fd[netrom], peer ptr[out, sockaddr_netrom, opt], peerlen ptr[inout, len[peer, int32]]) fd[netrom]
+listen$netrom(fd fd[netrom], backlog int32)
+sendmsg$netrom(fd fd[netrom], msg ptr[in, msghdr_netrom], f flags[send_flags])
+recvmsg$netrom(fd fd[netrom], msg ptr[in, msghdr_netrom], f flags[recv_flags])
+getsockname$netrom(fd fd[netrom], addr ptr[out, sockaddr_netrom], addrlen ptr[inout, len[addr, int32]])
+getpeername$netrom(fd fd[netrom], peer ptr[out, sockaddr_netrom], peerlen ptr[inout, len[peer, int32]])
+
+setsockopt$NETROM_T1(fd fd[netrom], level const[SOL_NETROM], opt const[NETROM_T1], arg ptr[in, int32], arglen len[arg])
+setsockopt$NETROM_T2(fd fd[netrom], level const[SOL_NETROM], opt const[NETROM_T2], arg ptr[in, int32], arglen len[arg])
+setsockopt$NETROM_N2(fd fd[netrom], level const[SOL_NETROM], opt const[NETROM_N2], arg ptr[in, int32], arglen len[arg])
+setsockopt$NETROM_T4(fd fd[netrom], level const[SOL_NETROM], opt const[NETROM_T4], arg ptr[in, int32], arglen len[arg])
+setsockopt$NETROM_IDLE(fd fd[netrom], level const[SOL_NETROM], opt const[NETROM_IDLE], arg ptr[in, int32], arglen len[arg])
+
+getsockopt$NETROM_T1(fd fd[netrom], level const[SOL_NETROM], opt const[NETROM_T1], arg ptr[out, int32], arglen ptr[inout, len[arg, int32]])
+getsockopt$NETROM_T2(fd fd[netrom], level const[SOL_NETROM], opt const[NETROM_T2], arg ptr[in, int32], arglen ptr[inout, len[arg, int32]])
+getsockopt$NETROM_N2(fd fd[netrom], level const[SOL_NETROM], opt const[NETROM_N2], arg ptr[in, int32], arglen ptr[inout, len[arg, int32]])
+getsockopt$NETROM_T4(fd fd[netrom], level const[SOL_NETROM], opt const[NETROM_T4], arg ptr[in, int32], arglen ptr[inout, len[arg, int32]])
+getsockopt$NETROM_IDLE(fd fd[netrom], level const[SOL_NETROM], opt const[NETROM_IDLE], arg ptr[in, int32], arglen ptr[inout, len[arg, int32]])
+
+ioctl$NETROM_TIOCOUTQ(fd fd[netrom], cmd const[TIOCOUTQ], arg ptr[out, int32])
+ioctl$NETROM_TIOCINQ(fd fd[netrom], cmd const[TIOCINQ], arg ptr[out, int32])
+ioctl$NETROM_SIOCGSTAMP(fd fd[netrom], cmd const[SIOCGSTAMP], arg ptr[out, int32])
+ioctl$NETROM_SIOCGSTAMPNS(fd fd[netrom], cmd const[SIOCGSTAMPNS], arg ptr[out, int32])
+ioctl$NETROM_SIOCADDRT(fd fd[netrom], cmd const[SIOCADDRT], arg ptr[out, int32])
+
+ax25_address {
+ call array[int8, 7]
+}
+
+sockaddr_ax25 {
+ family const[AF_NETROM, int16]
+ call ax25_address
+ ndigis int32
+}
+
+full_sockaddr_ax25 {
+ ax25 sockaddr_ax25
+ dig array[ax25_address, AX25_MAX_DIGIS]
+}
+
+sockaddr_netrom [
+ ax25 sockaddr_ax25
+ full full_sockaddr_ax25
+] [varlen]
+
+msghdr_netrom {
+ addr ptr[in, sockaddr_netrom]
+ addrlen len[addr, int32]
+ vec ptr[in, array[iovec_in]]
+ vlen len[vec, intptr]
+ ctrl ptr[in, array[cmsghdr], opt]
+ ctrllen len[ctrl, intptr]
+ f flags[send_flags, int32]
+}
diff --git a/sys/sctp.txt b/sys/sctp.txt
index 3b2cb7972..b7edc4e47 100644..100755
--- a/sys/sctp.txt
+++ b/sys/sctp.txt
@@ -51,6 +51,45 @@ setsockopt$SCTP_PEER_ADDR_THLDS(fd fd[sctp], level const[SOL_SCTP], opt const[SC
setsockopt$SCTP_RECVRCVINFO(fd fd[sctp], level const[SOL_SCTP], opt const[SCTP_RECVRCVINFO], val ptr[in, int32], len len[val])
setsockopt$SCTP_RECVNXTINFO(fd fd[sctp], level const[SOL_SCTP], opt const[SCTP_RECVNXTINFO], val ptr[in, int32], len len[val])
+getsockopt$SCTP_STATUS(fd fd[sctp], level const[SOL_SCTP], opt const[SCTP_STATUS], val ptr[inout, sctp_status], len ptr[inout, len[val, int32]] )
+getsockopt$SCTP_DISABLE_FRAGMENTS(fd fd[sctp], level const[SOL_SCTP], opt const[SCTP_DISABLE_FRAGMENTS], val ptr[out, int32], len ptr[inout, len[val, int32]] )
+getsockopt$SCTP_EVENTS(fd fd[sctp], level const[SOL_SCTP], opt const[SCTP_EVENTS], val ptr[out, sctp_event_subscribe], len ptr[inout, len[val, int32]] )
+getsockopt$SCTP_AUTOCLOSE(fd fd[sctp], level const[SOL_SCTP], opt const[SCTP_AUTOCLOSE], val ptr[out, int32], len ptr[inout, len[val, int32]] )
+getsockopt$SCTP_SOCKOPT_PEELOFF(fd fd[sctp], level const[SOL_SCTP], opt const[SCTP_SOCKOPT_PEELOFF], val ptr[inout, sctp_peeloff_arg_t], len ptr[inout, len[val, int32]] )
+getsockopt$SCTP_PEER_ADDR_PARAMS(fd fd[sctp], level const[SOL_SCTP], opt const[SCTP_PEER_ADDR_PARAMS], val ptr[inout, sctp_paddrparams], len ptr[inout, len[val, int32]] )
+getsockopt$SCTP_DELAYED_SACK(fd fd[sctp], level const[SOL_SCTP], opt const[SCTP_DELAYED_SACK], val ptr[inout, sctp_sack_info], len ptr[inout, len[val, int32]] )
+getsockopt$SCTP_INITMSG(fd fd[sctp], level const[SOL_SCTP], opt const[SCTP_INITMSG], val ptr[out, sctp_initmsg], len ptr[inout, len[val, int32]] )
+getsockopt$SCTP_GET_PEER_ADDRS(fd fd[sctp], level const[SOL_SCTP], opt const[SCTP_GET_PEER_ADDRS], val ptr[inout, sctp_getaddrs], len ptr[inout, len[val, int32]] )
+getsockopt$SCTP_GET_LOCAL_ADDRS(fd fd[sctp], level const[SOL_SCTP], opt const[SCTP_GET_LOCAL_ADDRS], val ptr[inout, sctp_getaddrs], len ptr[inout, len[val, int32]] )
+getsockopt$SCTP_SOCKOPT_CONNECTX3(fd fd[sctp], level const[SOL_SCTP], opt const[SCTP_SOCKOPT_CONNECTX3], val ptr[inout, sctp_getaddrs_old], len ptr[inout, len[val, int32]] )
+getsockopt$SCTP_DEFAULT_SEND_PARAM(fd fd[sctp], level const[SOL_SCTP], opt const[SCTP_DEFAULT_SEND_PARAM], val ptr[inout, sctp_sndrcvinfo], len ptr[inout, len[val, int32]] )
+getsockopt$SCTP_DEFAULT_SNDINFO(fd fd[sctp], level const[SOL_SCTP], opt const[SCTP_DEFAULT_SNDINFO], val ptr[inout, sctp_sndinfo], len ptr[inout, len[val, int32]] )
+getsockopt$SCTP_PRIMARY_ADDR(fd fd[sctp], level const[SOL_SCTP], opt const[SCTP_PRIMARY_ADDR], val ptr[inout, sctp_prim], len ptr[inout, len[val, int32]] )
+getsockopt$SCTP_NODELAY(fd fd[sctp], level const[SOL_SCTP], opt const[SCTP_NODELAY], val ptr[out, int32], len ptr[inout, len[val, int32]] )
+getsockopt$SCTP_RTOINFO(fd fd[sctp], level const[SOL_SCTP], opt const[SCTP_RTOINFO], val ptr[inout, sctp_rtoinfo], len ptr[inout, len[val, int32]] )
+getsockopt$SCTP_ASSOCINFO(fd fd[sctp], level const[SOL_SCTP], opt const[SCTP_ASSOCINFO], val ptr[inout, sctp_sndinfo], len ptr[inout, len[val, int32]] )
+getsockopt$SCTP_I_WANT_MAPPED_V4_ADDR(fd fd[sctp], level const[SOL_SCTP], opt const[SCTP_I_WANT_MAPPED_V4_ADDR], val ptr[out, int32], len ptr[inout, len[val, int32]] )
+getsockopt$SCTP_MAXSEG(fd fd[sctp], level const[SOL_SCTP], opt const[SCTP_MAXSEG], val ptr[inout, sctp_assoc_value], len ptr[inout, len[val, int32]] )
+getsockopt$SCTP_GET_PEER_ADDR_INFO(fd fd[sctp], level const[SOL_SCTP], opt const[SCTP_GET_PEER_ADDR_INFO], val ptr[inout, sctp_paddrinfo], len ptr[inout, len[val, int32]] )
+getsockopt$SCTP_ADAPTATION_LAYER(fd fd[sctp], level const[SOL_SCTP], opt const[SCTP_ADAPTATION_LAYER], val ptr[out, sctp_setadaptation], len ptr[inout, len[val, int32]] )
+getsockopt$SCTP_CONTEXT(fd fd[sctp], level const[SOL_SCTP], opt const[SCTP_CONTEXT], val ptr[inout, sctp_assoc_value], len ptr[inout, len[val, int32]] )
+getsockopt$SCTP_FRAGMENT_INTERLEAVE(fd fd[sctp], level const[SOL_SCTP], opt const[SCTP_FRAGMENT_INTERLEAVE], val ptr[out, int32], len ptr[inout, len[val, int32]] )
+getsockopt$SCTP_PARTIAL_DELIVERY_POINT(fd fd[sctp], level const[SOL_SCTP], opt const[SCTP_PARTIAL_DELIVERY_POINT], val ptr[inout, sctp_assoc_value], len ptr[inout, len[val, int32]] )
+getsockopt$SCTP_MAX_BURST(fd fd[sctp], level const[SOL_SCTP], opt const[SCTP_MAX_BURST], val ptr[out, int32], len ptr[inout, len[val, int32]] )
+getsockopt$SCTP_HMAC_IDENT(fd fd[sctp], level const[SOL_SCTP], opt const[SCTP_HMAC_IDENT], val ptr[inout, sctp_authkeyid], len ptr[inout, len[val, int32]] )
+getsockopt$SCTP_AUTH_ACTIVE_KEY(fd fd[sctp], level const[SOL_SCTP], opt const[SCTP_AUTH_ACTIVE_KEY], val ptr[inout, sctp_authkeyid], len ptr[inout, len[val, int32]] )
+getsockopt$SCTP_PEER_AUTH_CHUNKS(fd fd[sctp], level const[SOL_SCTP], opt const[SCTP_PEER_AUTH_CHUNKS], val ptr[inout, sctp_authchunks], len ptr[inout, len[val, int32]] )
+getsockopt$SCTP_LOCAL_AUTH_CHUNKS(fd fd[sctp], level const[SOL_SCTP], opt const[SCTP_LOCAL_AUTH_CHUNKS], val ptr[inout, sctp_authchunks], len ptr[inout, len[val, int32]] )
+getsockopt$SCTP_GET_ASSOC_NUMBER(fd fd[sctp], level const[SOL_SCTP], opt const[SCTP_GET_ASSOC_NUMBER], val ptr[out, int32], len ptr[inout, len[val, int32]] )
+getsockopt$SCTP_GET_ASSOC_ID_LIST(fd fd[sctp], level const[SOL_SCTP], opt const[SCTP_GET_ASSOC_ID_LIST], val ptr[out, sctp_assoc_ids], len ptr[inout, len[val, int32]] )
+getsockopt$SCTP_AUTO_ASCONF(fd fd[sctp], level const[SOL_SCTP], opt const[SCTP_AUTO_ASCONF], val ptr[out, int32], len ptr[inout, len[val, int32]] )
+getsockopt$SCTP_PEER_ADDR_THLDS(fd fd[sctp], level const[SOL_SCTP], opt const[SCTP_PEER_ADDR_THLDS], val ptr[inout, sctp_paddrthlds], len ptr[inout, len[val, int32]] )
+getsockopt$SCTP_GET_ASSOC_STATS(fd fd[sctp], level const[SOL_SCTP], opt const[SCTP_GET_ASSOC_STATS], val ptr[inout, sctp_assoc_stats], len ptr[inout, len[val, int32]] )
+getsockopt$SCTP_RECVRCVINFO(fd fd[sctp], level const[SOL_SCTP], opt const[SCTP_RECVRCVINFO], val ptr[out, int32], len ptr[inout, len[val, int32]] )
+getsockopt$SCTP_RECVNXTINFO(fd fd[sctp], level const[SOL_SCTP], opt const[SCTP_RECVNXTINFO], val ptr[out, int32], len ptr[inout, len[val, int32]] )
+
+ioctl$SCTP_SIOCINQ(fd fd[sctp], cmd const[SIOCINQ], arg ptr[out, int32])
+
sctp_socket_type = SOCK_STREAM, SOCK_SEQPACKET
sctp_sndrcv_flags = SCTP_UNORDERED, SCTP_ADDR_OVER, SCTP_ABORT, SCTP_EOF
sctp_spp_flags = SPP_HB_ENABLE, SPP_HB_DISABLE, SPP_HB_DEMAND, SPP_HB_TIME_IS_ZERO, SPP_PMTUD_ENABLE, SPP_PMTUD_DISABLE, SPP_SACKDELAY_ENABLE, SPP_SACKDELAY_DISABLE
@@ -220,3 +259,61 @@ sctp_paddrthlds {
maxrxt int16
pfthld int16
}
+
+sctp_paddrinfo {
+ assoc int32
+ addr sockaddr_storage_sctp
+ state int32
+ cwnd int32
+ srtt int32
+ rto int32
+ mtu int32
+} [packed, align_4]
+
+sctp_status {
+ assoc int32
+ state int32
+ rwnd int32
+ unpack int16
+ pend int16
+ in int16
+ out int16
+ frag int32
+ prim sctp_paddrinfo
+}
+
+sctp_getaddrs_old {
+ assoc int32
+ num int32
+ addrs ptr[in, sockaddr_sctp]
+}
+
+sctp_getaddrs {
+ assoc int32
+ num int32
+ addrs int8
+}
+
+sctp_peeloff_arg_t {
+ assoc int32
+ sd int32
+}
+
+sctp_assoc_stats {
+ assoc int32
+ rto sockaddr_storage_sctp
+ status array[int64, 15]
+}
+
+sctp_assoc_ids {
+ num int32
+ assoc array[int32]
+}
+
+sctp_authchunks {
+ chunk int8
+}
+
+sctp_setadaptation {
+ adpt int32
+}