aboutsummaryrefslogtreecommitdiffstats
path: root/sys/linux/socket.txt
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2018-03-02 16:28:00 +0100
committerDmitry Vyukov <dvyukov@google.com>2018-03-05 12:10:27 +0100
commitf027f1a3f7c45bafd7f99776548ef73ba3cc22ec (patch)
treea004cfeb34c34ae36ef5b2dbfd65f7947c980c61 /sys/linux/socket.txt
parent002cecf2022de3ab01c87f905477aa3b063d73fc (diff)
sys/linux: use size attributes on structs
1. Add size attribte on sockaddr. 2. Remove sockaddr's that are larger than 16 bytes from sockaddr. 3. Add size attribute on sockaddr_storage which wasn't actually 128 bytes. 4. Add size attribute to ifreq. 5. Fix ifmap field types as uncovered by the size attributes. 6. Fix sockaddr_storage_tcp from struct to union which is should be. 7. Make sockaddr_un_file fixed size as it should be. 8. Fix some explicit paddings that were only correct for 64 bits.
Diffstat (limited to 'sys/linux/socket.txt')
-rw-r--r--sys/linux/socket.txt67
1 files changed, 31 insertions, 36 deletions
diff --git a/sys/linux/socket.txt b/sys/linux/socket.txt
index 0d9ae146e..46b434fae 100644
--- a/sys/linux/socket.txt
+++ b/sys/linux/socket.txt
@@ -49,19 +49,13 @@ cmsg_levels = SOL_SOCKET, IPPROTO_ICMP, SOL_IP, SOL_TCP, SOL_UDP, SOL_IPV6, SOL_
# This sockaddr type corresponds to the struct sockaddr and is 16 bytes or less.
# TODO: add AF_APPLETALK, AF_ATMPVC, AF_X25, AF_ROSE, AF_DECnet, AF_ATMSVC, AF_IRDA, AF_IB, AF_TIPC, AF_IUCV, AF_RXRPC, AF_ISDN, AF_PHONET, AF_IEEE802154, AF_CAIF, AF_QIPCRTR
-# Note: AF_UNIX, AF_INET6, AF_PACKET, AF_ALG sockaddr is bigger than 16 bytes
+# Note: AF_UNIX, AF_INET6, AF_PACKET, AF_ALG, AF_PPPOX sockaddr is bigger than 16 bytes
# Note: AF_NETROM sockaddr is the same as AF_AX25
sockaddr [
in sockaddr_in
ax25 sockaddr_ax25
ipx sockaddr_ipx
nl sockaddr_nl
- pppoe sockaddr_pppoe
- pppol2tp sockaddr_pppol2tp
- pppol2tpin6 sockaddr_pppol2tpin6
- pppol2tpv3 sockaddr_pppol2tpv3
- pppol2tpv3in6 sockaddr_pppol2tpv3in6
- pptp sockaddr_pptp
llc sockaddr_llc
can sockaddr_can
sco sockaddr_sco
@@ -72,7 +66,7 @@ sockaddr [
vsock sockaddr_vm
ethernet sockaddr_ethernet
generic sockaddr_generic
-]
+] [size[SOCKADDR_SIZE]]
# This sockaddr type corresponds to the sockaddr_storage type and is 128 bytes size.
sockaddr_storage [
@@ -101,7 +95,10 @@ sockaddr_storage [
vsock sockaddr_vm
ethernet sockaddr_ethernet
generic sockaddr_storage_generic
-] [varlen]
+] [size[SOCKADDR_STORAGE_SIZE]]
+
+define SOCKADDR_SIZE sizeof(struct sockaddr)
+define SOCKADDR_STORAGE_SIZE sizeof(struct sockaddr_storage)
sockaddr_generic {
sa_family flags[socket_domain, int16]
@@ -236,28 +233,38 @@ ioctl$sock_SIOCGPGRP(fd sock, cmd const[SIOCGPGRP], arg ptr[out, pid])
resource ifindex[int32]
+ifreq {
+ ifr_ifrn devname
+ ifr_ifru ifr_ifru
+} [size[IFREQ_SIZE]]
+
+ifr_ifru [
+ ifru_addrs sockaddr
+ ifru_flags flags[ifru_flags, int16]
+ ifru_ivalue int32
+ ifru_mtu int32
+ ifru_map ifmap
+ ifru_names devname
+ ifru_data ptr[in, array[int8, 32]]
+ ifru_settings if_settings
+]
+
ifreq_SIOCGIFINDEX {
ifr_ifrn devname
ifr_ifru ifindex
- pad array[const[0, int8], 20]
-} [packed]
+} [size[IFREQ_SIZE]]
ifreq_SIOCETHTOOL {
ifr_ifrn devname
- ifr_ifru ptr64[inout, ethtool_cmd_u]
- pad array[const[0, int8], 16]
-} [packed]
-
-ifreq {
- ifr_ifrn devname
- ifr_ifru ifr_ifru
-}
+ ifr_ifru ptr[inout, ethtool_cmd_u]
+} [size[IFREQ_SIZE]]
ifreq_mtu {
ifr_ifrn devname
ifru_mtu int32
- pad array[const[0, int8], 20]
-}
+} [size[IFREQ_SIZE]]
+
+define IFREQ_SIZE sizeof(struct ifreq)
# We could add "eth0" to this list as well, but this will affect the connection
# between fuzzer and manager and produce lots of "no output" crashes
@@ -269,27 +276,15 @@ type devname string[devnames, IFNAMSIZ]
devname_mask {
lo flags[devname_mask_values, int8]
- hi array[const[0, int8], 15]
-}
+} [size[IFNAMSIZ]]
devname_mask_values = 0, 0xff
-ifr_ifru [
- ifru_addrs sockaddr
- ifru_flags flags[ifru_flags, int16]
- ifru_ivalue int32
- ifru_mtu int32
- ifru_map ifmap
- ifru_names devname
- ifru_data ptr[in, array[int8, 32]]
- ifru_settings if_settings
-]
-
ifru_flags = IFF_TUN, IFF_TAP, IFF_NO_PI, IFF_ONE_QUEUE, IFF_VNET_HDR, IFF_TUN_EXCL, IFF_MULTI_QUEUE, IFF_ATTACH_QUEUE, IFF_DETACH_QUEUE, IFF_PERSIST, IFF_NOFILTER
ifmap {
- mem_start int64
- mem_end int64
+ mem_start intptr
+ mem_end intptr
base_addr int16
irq int8
dma int8