diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2018-03-02 16:28:00 +0100 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2018-03-05 12:10:27 +0100 |
| commit | f027f1a3f7c45bafd7f99776548ef73ba3cc22ec (patch) | |
| tree | a004cfeb34c34ae36ef5b2dbfd65f7947c980c61 /sys/linux/socket.txt | |
| parent | 002cecf2022de3ab01c87f905477aa3b063d73fc (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.txt | 67 |
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 |
