aboutsummaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authorAndrey Konovalov <andreyknvl@google.com>2017-02-13 14:38:19 +0100
committerAndrey Konovalov <andreyknvl@google.com>2017-02-13 14:38:19 +0100
commit53e5ebba71240aa17f16f705aea37d7082bb767f (patch)
tree8bc958e7485c1ad43d4ed5eb2829727b3fe2c079 /sys
parent2a4a49e7f31f96a86d53b6b65fd8316b29dbd252 (diff)
sys: add dccp socket & packet descriptions
Diffstat (limited to 'sys')
-rw-r--r--sys/socket_inet_dccp.txt42
-rw-r--r--sys/socket_inet_dccp_amd64.const25
-rw-r--r--sys/socket_inet_dccp_arm64.const25
-rw-r--r--sys/socket_inet_dccp_ppc64le.const25
-rw-r--r--sys/vnet.txt36
-rw-r--r--sys/vnet_amd64.const11
-rw-r--r--sys/vnet_arm64.const11
-rw-r--r--sys/vnet_ppc64le.const11
8 files changed, 186 insertions, 0 deletions
diff --git a/sys/socket_inet_dccp.txt b/sys/socket_inet_dccp.txt
new file mode 100644
index 000000000..b392d8b44
--- /dev/null
+++ b/sys/socket_inet_dccp.txt
@@ -0,0 +1,42 @@
+# Copyright 2017 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.
+
+# AF_INET and AF_INET6: DCCP support
+
+include <linux/dccp.h>
+
+resource sock_dccp[sock_in]
+
+dccp_pair {
+ f0 sock_dccp
+ f1 sock_dccp
+}
+
+socket$dccp(domain const[AF_INET], type const[SOCK_DCCP], proto const[0]) sock_dccp
+socketpair$dccp(domain const[AF_INET], type const[SOCK_DCCP], proto const[0], fds ptr[out, dccp_pair])
+
+resource sock_dccp6[sock_in6]
+
+dccp6_pair {
+ f0 sock_dccp6
+ f1 sock_dccp6
+}
+
+socket$dccp6(domain const[AF_INET6], type const[SOCK_DCCP], proto const[0]) sock_dccp6
+socketpair$dccp6(domain const[AF_INET6], type const[SOCK_DCCP], proto const[0], fds ptr[out, dccp6_pair])
+
+# Generic DCCP socket options
+
+dccp_option_types_int = DCCP_SOCKOPT_PACKET_SIZE, DCCP_SOCKOPT_CHANGE_L, DCCP_SOCKOPT_CHANGE_R, DCCP_SOCKOPT_GET_CUR_MPS, DCCP_SOCKOPT_SERVER_TIMEWAIT, DCCP_SOCKOPT_SEND_CSCOV, DCCP_SOCKOPT_RECV_CSCOV, DCCP_SOCKOPT_QPOLICY_ID, DCCP_SOCKOPT_QPOLICY_TXQLEN
+
+dccp_option_types_buf = DCCP_SOCKOPT_SERVICE, DCCP_SOCKOPT_AVAILABLE_CCIDS, DCCP_SOCKOPT_CCID, DCCP_SOCKOPT_TX_CCID, DCCP_SOCKOPT_RX_CCID, DCCP_SOCKOPT_CCID_RX_INFO, DCCP_SOCKOPT_CCID_TX_INFO
+
+getsockopt$dccp_int(fd sock_dccp, level const[IPPROTO_DCCP], optname flags[dccp_option_types_int], optval ptr[out, int32], optlen ptr[inout, len[optval, int32]])
+setsockopt$dccp_int(fd sock_dccp, level const[IPPROTO_DCCP], optname flags[dccp_option_types_int], optval ptr[in, int32], optlen len[optval])
+getsockopt$dccp6_int(fd sock_dccp6, level const[IPPROTO_DCCP], optname flags[dccp_option_types_int], optval ptr[out, int32], optlen ptr[inout, len[optval, int32]])
+setsockopt$dccp6_int(fd sock_dccp6, level const[IPPROTO_DCCP], optname flags[dccp_option_types_int], optval ptr[in, int32], optlen len[optval])
+
+getsockopt$dccp_buf(fd sock_dccp, level const[IPPROTO_DCCP], optname flags[dccp_option_types_buf], optval buffer[out], optlen ptr[inout, len[optval, int32]])
+setsockopt$dccp_buf(fd sock_dccp, level const[IPPROTO_DCCP], optname flags[dccp_option_types_buf], optval buffer[in], optlen len[optval])
+getsockopt$dccp6_buf(fd sock_dccp6, level const[IPPROTO_DCCP], optname flags[dccp_option_types_buf], optval buffer[out], optlen ptr[inout, len[optval, int32]])
+setsockopt$dccp6_buf(fd sock_dccp6, level const[IPPROTO_DCCP], optname flags[dccp_option_types_buf], optval buffer[in], optlen len[optval])
diff --git a/sys/socket_inet_dccp_amd64.const b/sys/socket_inet_dccp_amd64.const
new file mode 100644
index 000000000..07fc8419c
--- /dev/null
+++ b/sys/socket_inet_dccp_amd64.const
@@ -0,0 +1,25 @@
+# AUTOGENERATED FILE
+AF_INET = 2
+AF_INET6 = 10
+DCCP_SOCKOPT_AVAILABLE_CCIDS = 12
+DCCP_SOCKOPT_CCID = 13
+DCCP_SOCKOPT_CCID_RX_INFO = 128
+DCCP_SOCKOPT_CCID_TX_INFO = 192
+DCCP_SOCKOPT_CHANGE_L = 3
+DCCP_SOCKOPT_CHANGE_R = 4
+DCCP_SOCKOPT_GET_CUR_MPS = 5
+DCCP_SOCKOPT_PACKET_SIZE = 1
+DCCP_SOCKOPT_QPOLICY_ID = 16
+DCCP_SOCKOPT_QPOLICY_TXQLEN = 17
+DCCP_SOCKOPT_RECV_CSCOV = 11
+DCCP_SOCKOPT_RX_CCID = 15
+DCCP_SOCKOPT_SEND_CSCOV = 10
+DCCP_SOCKOPT_SERVER_TIMEWAIT = 6
+DCCP_SOCKOPT_SERVICE = 2
+DCCP_SOCKOPT_TX_CCID = 14
+IPPROTO_DCCP = 33
+SOCK_DCCP = 6
+__NR_getsockopt = 55
+__NR_setsockopt = 54
+__NR_socket = 41
+__NR_socketpair = 53
diff --git a/sys/socket_inet_dccp_arm64.const b/sys/socket_inet_dccp_arm64.const
new file mode 100644
index 000000000..f80355a64
--- /dev/null
+++ b/sys/socket_inet_dccp_arm64.const
@@ -0,0 +1,25 @@
+# AUTOGENERATED FILE
+AF_INET = 2
+AF_INET6 = 10
+DCCP_SOCKOPT_AVAILABLE_CCIDS = 12
+DCCP_SOCKOPT_CCID = 13
+DCCP_SOCKOPT_CCID_RX_INFO = 128
+DCCP_SOCKOPT_CCID_TX_INFO = 192
+DCCP_SOCKOPT_CHANGE_L = 3
+DCCP_SOCKOPT_CHANGE_R = 4
+DCCP_SOCKOPT_GET_CUR_MPS = 5
+DCCP_SOCKOPT_PACKET_SIZE = 1
+DCCP_SOCKOPT_QPOLICY_ID = 16
+DCCP_SOCKOPT_QPOLICY_TXQLEN = 17
+DCCP_SOCKOPT_RECV_CSCOV = 11
+DCCP_SOCKOPT_RX_CCID = 15
+DCCP_SOCKOPT_SEND_CSCOV = 10
+DCCP_SOCKOPT_SERVER_TIMEWAIT = 6
+DCCP_SOCKOPT_SERVICE = 2
+DCCP_SOCKOPT_TX_CCID = 14
+IPPROTO_DCCP = 33
+SOCK_DCCP = 6
+__NR_getsockopt = 209
+__NR_setsockopt = 208
+__NR_socket = 198
+__NR_socketpair = 199
diff --git a/sys/socket_inet_dccp_ppc64le.const b/sys/socket_inet_dccp_ppc64le.const
new file mode 100644
index 000000000..baa1f820d
--- /dev/null
+++ b/sys/socket_inet_dccp_ppc64le.const
@@ -0,0 +1,25 @@
+# AUTOGENERATED FILE
+AF_INET = 2
+AF_INET6 = 10
+DCCP_SOCKOPT_AVAILABLE_CCIDS = 12
+DCCP_SOCKOPT_CCID = 13
+DCCP_SOCKOPT_CCID_RX_INFO = 128
+DCCP_SOCKOPT_CCID_TX_INFO = 192
+DCCP_SOCKOPT_CHANGE_L = 3
+DCCP_SOCKOPT_CHANGE_R = 4
+DCCP_SOCKOPT_GET_CUR_MPS = 5
+DCCP_SOCKOPT_PACKET_SIZE = 1
+DCCP_SOCKOPT_QPOLICY_ID = 16
+DCCP_SOCKOPT_QPOLICY_TXQLEN = 17
+DCCP_SOCKOPT_RECV_CSCOV = 11
+DCCP_SOCKOPT_RX_CCID = 15
+DCCP_SOCKOPT_SEND_CSCOV = 10
+DCCP_SOCKOPT_SERVER_TIMEWAIT = 6
+DCCP_SOCKOPT_SERVICE = 2
+DCCP_SOCKOPT_TX_CCID = 14
+IPPROTO_DCCP = 33
+SOCK_DCCP = 6
+__NR_getsockopt = 340
+__NR_setsockopt = 339
+__NR_socket = 326
+__NR_socketpair = 333
diff --git a/sys/vnet.txt b/sys/vnet.txt
index 817290e36..26fa6ba3f 100644
--- a/sys/vnet.txt
+++ b/sys/vnet.txt
@@ -383,12 +383,14 @@ ipv4_payload [
tcp tcp_packet
udp udp_packet
icmp icmp_packet
+ dccp dccp_packet
] [varlen]
ipv6_payload [
tcp tcp_packet
udp udp_packet
icmpv6 icmpv6_packet
+ dccp dccp_packet
] [varlen]
################################################################################
@@ -824,3 +826,37 @@ icmpv6_packet [
# TODO: ICMPV6_MLD2_REPORT
# TODO: ICMPV6_DHAAD_REQUEST, ICMPV6_DHAAD_REPLY, ICMPV6_MOBILE_PREFIX_SOL, ICMPV6_MOBILE_PREFIX_ADV (with ipv6 ext headers)
] [varlen]
+
+################################################################################
+###################################### DCCP ####################################
+################################################################################
+
+# https://tools.ietf.org/html/rfc4340#section-5
+
+include <uapi/linux/dccp.h>
+
+# TODO: describe each type
+dccp_types = DCCP_PKT_REQUEST, DCCP_PKT_RESPONSE, DCCP_PKT_DATA, DCCP_PKT_ACK, DCCP_PKT_DATAACK, DCCP_PKT_CLOSEREQ, DCCP_PKT_CLOSE, DCCP_PKT_RESET, DCCP_PKT_SYNC, DCCP_PKT_SYNCACK, DCCP_PKT_INVALID
+
+dccp_header {
+ src_port proc[int16be, 20000, 4]
+ dst_port proc[int16be, 20000, 4]
+ offset bytesize4[parent, int8]
+ cscov const[1, int8:4]
+# TODO: cscov might have other values, affects checksummed data
+ ccval int8:4
+ csum csum[parent, pseudo, IPPROTO_DCCP, int16be]
+ x const[0, int8:1]
+ type flags[dccp_types, int8:4]
+ reserved1 int8:3
+ seq_num array[int8, 3]
+ reserved2 int8
+ ack_num array[int8, 3]
+# TODO: seq_num and ack_num might have different size depending on x
+# TODO: options
+} [packed]
+
+dccp_packet {
+ header dccp_header
+ payload array[int8]
+} [packed]
diff --git a/sys/vnet_amd64.const b/sys/vnet_amd64.const
index fe6731c78..ec468bc1b 100644
--- a/sys/vnet_amd64.const
+++ b/sys/vnet_amd64.const
@@ -5,6 +5,17 @@ CIPSO_V4_TAG_INVALID = 0
CIPSO_V4_TAG_PBITMAP = 6
CIPSO_V4_TAG_RANGE = 5
CIPSO_V4_TAG_RBITMAP = 1
+DCCP_PKT_ACK = 3
+DCCP_PKT_CLOSE = 6
+DCCP_PKT_CLOSEREQ = 5
+DCCP_PKT_DATA = 2
+DCCP_PKT_DATAACK = 4
+DCCP_PKT_INVALID = 10
+DCCP_PKT_REQUEST = 0
+DCCP_PKT_RESET = 7
+DCCP_PKT_RESPONSE = 1
+DCCP_PKT_SYNC = 8
+DCCP_PKT_SYNCACK = 9
ETH_P_1588 = 35063
ETH_P_8021AD = 34984
ETH_P_8021AH = 35047
diff --git a/sys/vnet_arm64.const b/sys/vnet_arm64.const
index fe6731c78..ec468bc1b 100644
--- a/sys/vnet_arm64.const
+++ b/sys/vnet_arm64.const
@@ -5,6 +5,17 @@ CIPSO_V4_TAG_INVALID = 0
CIPSO_V4_TAG_PBITMAP = 6
CIPSO_V4_TAG_RANGE = 5
CIPSO_V4_TAG_RBITMAP = 1
+DCCP_PKT_ACK = 3
+DCCP_PKT_CLOSE = 6
+DCCP_PKT_CLOSEREQ = 5
+DCCP_PKT_DATA = 2
+DCCP_PKT_DATAACK = 4
+DCCP_PKT_INVALID = 10
+DCCP_PKT_REQUEST = 0
+DCCP_PKT_RESET = 7
+DCCP_PKT_RESPONSE = 1
+DCCP_PKT_SYNC = 8
+DCCP_PKT_SYNCACK = 9
ETH_P_1588 = 35063
ETH_P_8021AD = 34984
ETH_P_8021AH = 35047
diff --git a/sys/vnet_ppc64le.const b/sys/vnet_ppc64le.const
index fe6731c78..ec468bc1b 100644
--- a/sys/vnet_ppc64le.const
+++ b/sys/vnet_ppc64le.const
@@ -5,6 +5,17 @@ CIPSO_V4_TAG_INVALID = 0
CIPSO_V4_TAG_PBITMAP = 6
CIPSO_V4_TAG_RANGE = 5
CIPSO_V4_TAG_RBITMAP = 1
+DCCP_PKT_ACK = 3
+DCCP_PKT_CLOSE = 6
+DCCP_PKT_CLOSEREQ = 5
+DCCP_PKT_DATA = 2
+DCCP_PKT_DATAACK = 4
+DCCP_PKT_INVALID = 10
+DCCP_PKT_REQUEST = 0
+DCCP_PKT_RESET = 7
+DCCP_PKT_RESPONSE = 1
+DCCP_PKT_SYNC = 8
+DCCP_PKT_SYNCACK = 9
ETH_P_1588 = 35063
ETH_P_8021AD = 34984
ETH_P_8021AH = 35047