diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2018-03-21 12:18:36 +0100 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2018-03-21 12:18:36 +0100 |
| commit | 7c62f718046a2204a35cfe8850f9006b686b1c22 (patch) | |
| tree | 26f9cdda898f4cd455c585d741f67fb941ef4258 /executor | |
| parent | 704259f6449a65324f92d2737a291da10fdac03f (diff) | |
sys/linux: add netlink fou descriptions
Diffstat (limited to 'executor')
| -rw-r--r-- | executor/common_linux.h | 54 | ||||
| -rw-r--r-- | executor/syscalls_linux.h | 40 |
2 files changed, 84 insertions, 10 deletions
diff --git a/executor/common_linux.h b/executor/common_linux.h index 36eff74ef..825472d1b 100644 --- a/executor/common_linux.h +++ b/executor/common_linux.h @@ -119,6 +119,12 @@ #include <sys/types.h> #include <unistd.h> #endif +#if defined(SYZ_EXECUTOR) || defined(__NR_syz_genetlink_get_family_id) +#include <linux/genetlink.h> +#include <linux/netlink.h> +#include <sys/socket.h> +#include <sys/types.h> +#endif #if defined(SYZ_EXECUTOR) || (defined(SYZ_REPEAT) && defined(SYZ_WAIT_REPEAT)) || \ defined(SYZ_USE_TMP_DIR) || defined(SYZ_HANDLE_SEGV) || defined(SYZ_TUN_ENABLE) || \ @@ -724,6 +730,54 @@ static uintptr_t syz_init_net_socket(uintptr_t domain, uintptr_t type, uintptr_t #endif #endif +#if defined(SYZ_EXECUTOR) || defined(__NR_syz_genetlink_get_family_id) +static uintptr_t syz_genetlink_get_family_id(uintptr_t name) +{ + char buf[512] = {0}; + struct nlmsghdr* hdr = (struct nlmsghdr*)buf; + struct genlmsghdr* genlhdr = (struct genlmsghdr*)NLMSG_DATA(hdr); + struct nlattr* attr = (struct nlattr*)(genlhdr + 1); + hdr->nlmsg_len = sizeof(*hdr) + sizeof(*genlhdr) + sizeof(*attr) + GENL_NAMSIZ; + hdr->nlmsg_type = GENL_ID_CTRL; + hdr->nlmsg_flags = NLM_F_REQUEST | NLM_F_ACK; + genlhdr->cmd = CTRL_CMD_GETFAMILY; + attr->nla_type = CTRL_ATTR_FAMILY_NAME; + attr->nla_len = sizeof(*attr) + GENL_NAMSIZ; + NONFAILING(strncpy((char*)(attr + 1), (char*)name, GENL_NAMSIZ)); + struct iovec iov = {hdr, hdr->nlmsg_len}; + struct sockaddr_nl addr = {0}; + addr.nl_family = AF_NETLINK; + debug("syz_genetlink_get_family_id(%s)\n", (char*)(attr + 1)); + int fd = socket(AF_NETLINK, SOCK_RAW, NETLINK_GENERIC); + if (fd == -1) { + debug("syz_genetlink_get_family_id: socket failed: %d\n", errno); + return -1; + } + struct msghdr msg = {&addr, sizeof(addr), &iov, 1, NULL, 0, 0}; + if (sendmsg(fd, &msg, 0) == -1) { + debug("syz_genetlink_get_family_id: sendmsg failed: %d\n", errno); + close(fd); + return -1; + } + ssize_t n = recv(fd, buf, sizeof(buf), 0); + close(fd); + if (n <= 0) { + debug("syz_genetlink_get_family_id: recv failed: %d\n", errno); + return -1; + } + if (hdr->nlmsg_type != GENL_ID_CTRL) { + debug("syz_genetlink_get_family_id: wrong reply type: %d\n", hdr->nlmsg_type); + return -1; + } + for (; (char*)attr < buf + n; attr = (struct nlattr*)((char*)attr + NLMSG_ALIGN(attr->nla_len))) { + if (attr->nla_type == CTRL_ATTR_FAMILY_ID) + return *(uint16*)(attr + 1); + } + debug("syz_genetlink_get_family_id: no CTRL_ATTR_FAMILY_ID attr\n"); + return -1; +} +#endif + #if defined(SYZ_EXECUTOR) || defined(__NR_syz_kvm_setup_cpu) #if defined(__x86_64__) #include "common_kvm_amd64.h" diff --git a/executor/syscalls_linux.h b/executor/syscalls_linux.h index f5bb7f35f..6dbdc6365 100644 --- a/executor/syscalls_linux.h +++ b/executor/syscalls_linux.h @@ -2,11 +2,11 @@ #if defined(__i386__) || 0 #define GOARCH "386" -#define SYZ_REVISION "cfe2895f5fbcad40837aa245a03df6040de715d5" +#define SYZ_REVISION "07f18311863bda169fc776218d2d1d61ff0c5d80" #define SYZ_PAGE_SIZE 4096 #define SYZ_NUM_PAGES 4096 #define SYZ_DATA_OFFSET 536870912 -unsigned syscall_count = 1609; +unsigned syscall_count = 1613; call_t syscalls[] = { {"accept4", 364}, {"accept4$alg", 364}, @@ -1178,6 +1178,9 @@ call_t syscalls[] = { {"sendmmsg$nfc_llcp", 345}, {"sendmmsg$unix", 345}, {"sendmsg", 370}, + {"sendmsg$FOU_CMD_ADD", 370}, + {"sendmsg$FOU_CMD_DEL", 370}, + {"sendmsg$FOU_CMD_GET", 370}, {"sendmsg$alg", 370}, {"sendmsg$can_bcm", 370}, {"sendmsg$can_raw", 370}, @@ -1531,6 +1534,7 @@ call_t syscalls[] = { {"syz_extract_tcp_res$synack", 0, (syscall_t)syz_extract_tcp_res}, {"syz_fuse_mount", 0, (syscall_t)syz_fuse_mount}, {"syz_fuseblk_mount", 0, (syscall_t)syz_fuseblk_mount}, + {"syz_genetlink_get_family_id$fou", 0, (syscall_t)syz_genetlink_get_family_id}, {"syz_init_net_socket$bt_hci", 0, (syscall_t)syz_init_net_socket}, {"syz_init_net_socket$bt_l2cap", 0, (syscall_t)syz_init_net_socket}, {"syz_init_net_socket$bt_sco", 0, (syscall_t)syz_init_net_socket}, @@ -1623,11 +1627,11 @@ call_t syscalls[] = { #if defined(__x86_64__) || 0 #define GOARCH "amd64" -#define SYZ_REVISION "2622de14f49adc37c6c0e668588a4667e56d1b1e" +#define SYZ_REVISION "40c12d23c5c1e6c11e1ab13ed032c1e4dc0e684f" #define SYZ_PAGE_SIZE 4096 #define SYZ_NUM_PAGES 4096 #define SYZ_DATA_OFFSET 536870912 -unsigned syscall_count = 1661; +unsigned syscall_count = 1665; call_t syscalls[] = { {"accept", 43}, {"accept$alg", 43}, @@ -2839,6 +2843,9 @@ call_t syscalls[] = { {"sendmmsg$nfc_llcp", 307}, {"sendmmsg$unix", 307}, {"sendmsg", 46}, + {"sendmsg$FOU_CMD_ADD", 46}, + {"sendmsg$FOU_CMD_DEL", 46}, + {"sendmsg$FOU_CMD_GET", 46}, {"sendmsg$alg", 46}, {"sendmsg$can_bcm", 46}, {"sendmsg$can_raw", 46}, @@ -3204,6 +3211,7 @@ call_t syscalls[] = { {"syz_extract_tcp_res$synack", 0, (syscall_t)syz_extract_tcp_res}, {"syz_fuse_mount", 0, (syscall_t)syz_fuse_mount}, {"syz_fuseblk_mount", 0, (syscall_t)syz_fuseblk_mount}, + {"syz_genetlink_get_family_id$fou", 0, (syscall_t)syz_genetlink_get_family_id}, {"syz_init_net_socket$bt_hci", 0, (syscall_t)syz_init_net_socket}, {"syz_init_net_socket$bt_l2cap", 0, (syscall_t)syz_init_net_socket}, {"syz_init_net_socket$bt_sco", 0, (syscall_t)syz_init_net_socket}, @@ -3296,11 +3304,11 @@ call_t syscalls[] = { #if defined(__arm__) || 0 #define GOARCH "arm" -#define SYZ_REVISION "8ac5f9f73b086aecc7c5eb98e2c2867def6d4b57" +#define SYZ_REVISION "6698d4a368f4947b3b613f838e2e403841d38070" #define SYZ_PAGE_SIZE 4096 #define SYZ_NUM_PAGES 4096 #define SYZ_DATA_OFFSET 536870912 -unsigned syscall_count = 1606; +unsigned syscall_count = 1610; call_t syscalls[] = { {"accept", 285}, {"accept$alg", 285}, @@ -4465,6 +4473,9 @@ call_t syscalls[] = { {"sendmmsg$nfc_llcp", 374}, {"sendmmsg$unix", 374}, {"sendmsg", 296}, + {"sendmsg$FOU_CMD_ADD", 296}, + {"sendmsg$FOU_CMD_DEL", 296}, + {"sendmsg$FOU_CMD_GET", 296}, {"sendmsg$alg", 296}, {"sendmsg$can_bcm", 296}, {"sendmsg$can_raw", 296}, @@ -4824,6 +4835,7 @@ call_t syscalls[] = { {"syz_extract_tcp_res$synack", 0, (syscall_t)syz_extract_tcp_res}, {"syz_fuse_mount", 0, (syscall_t)syz_fuse_mount}, {"syz_fuseblk_mount", 0, (syscall_t)syz_fuseblk_mount}, + {"syz_genetlink_get_family_id$fou", 0, (syscall_t)syz_genetlink_get_family_id}, {"syz_init_net_socket$bt_hci", 0, (syscall_t)syz_init_net_socket}, {"syz_init_net_socket$bt_l2cap", 0, (syscall_t)syz_init_net_socket}, {"syz_init_net_socket$bt_sco", 0, (syscall_t)syz_init_net_socket}, @@ -4914,11 +4926,11 @@ call_t syscalls[] = { #if defined(__aarch64__) || 0 #define GOARCH "arm64" -#define SYZ_REVISION "4e6df14d0cbb5aa00fa2b8fa43a50654d7c2e425" +#define SYZ_REVISION "82423022bc7f184a88fcd00fbd20962f6dbbd57e" #define SYZ_PAGE_SIZE 4096 #define SYZ_NUM_PAGES 4096 #define SYZ_DATA_OFFSET 536870912 -unsigned syscall_count = 1590; +unsigned syscall_count = 1594; call_t syscalls[] = { {"accept", 202}, {"accept$alg", 202}, @@ -6072,6 +6084,9 @@ call_t syscalls[] = { {"sendmmsg$nfc_llcp", 269}, {"sendmmsg$unix", 269}, {"sendmsg", 211}, + {"sendmsg$FOU_CMD_ADD", 211}, + {"sendmsg$FOU_CMD_DEL", 211}, + {"sendmsg$FOU_CMD_GET", 211}, {"sendmsg$alg", 211}, {"sendmsg$can_bcm", 211}, {"sendmsg$can_raw", 211}, @@ -6430,6 +6445,7 @@ call_t syscalls[] = { {"syz_extract_tcp_res$synack", 0, (syscall_t)syz_extract_tcp_res}, {"syz_fuse_mount", 0, (syscall_t)syz_fuse_mount}, {"syz_fuseblk_mount", 0, (syscall_t)syz_fuseblk_mount}, + {"syz_genetlink_get_family_id$fou", 0, (syscall_t)syz_genetlink_get_family_id}, {"syz_init_net_socket$bt_hci", 0, (syscall_t)syz_init_net_socket}, {"syz_init_net_socket$bt_l2cap", 0, (syscall_t)syz_init_net_socket}, {"syz_init_net_socket$bt_sco", 0, (syscall_t)syz_init_net_socket}, @@ -6516,11 +6532,11 @@ call_t syscalls[] = { #if defined(__ppc64__) || defined(__PPC64__) || defined(__powerpc64__) || 0 #define GOARCH "ppc64le" -#define SYZ_REVISION "04d12a6320bebfddb56bad9ef80cf8d7551a13be" +#define SYZ_REVISION "18c287ebbc9da2ff832292feccf65374879463b6" #define SYZ_PAGE_SIZE 4096 #define SYZ_NUM_PAGES 4096 #define SYZ_DATA_OFFSET 536870912 -unsigned syscall_count = 1580; +unsigned syscall_count = 1584; call_t syscalls[] = { {"accept", 330}, {"accept$alg", 330}, @@ -7665,6 +7681,9 @@ call_t syscalls[] = { {"sendmmsg$nfc_llcp", 349}, {"sendmmsg$unix", 349}, {"sendmsg", 341}, + {"sendmsg$FOU_CMD_ADD", 341}, + {"sendmsg$FOU_CMD_DEL", 341}, + {"sendmsg$FOU_CMD_GET", 341}, {"sendmsg$alg", 341}, {"sendmsg$can_bcm", 341}, {"sendmsg$can_raw", 341}, @@ -8016,6 +8035,7 @@ call_t syscalls[] = { {"syz_extract_tcp_res$synack", 0, (syscall_t)syz_extract_tcp_res}, {"syz_fuse_mount", 0, (syscall_t)syz_fuse_mount}, {"syz_fuseblk_mount", 0, (syscall_t)syz_fuseblk_mount}, + {"syz_genetlink_get_family_id$fou", 0, (syscall_t)syz_genetlink_get_family_id}, {"syz_init_net_socket$bt_hci", 0, (syscall_t)syz_init_net_socket}, {"syz_init_net_socket$bt_l2cap", 0, (syscall_t)syz_init_net_socket}, {"syz_init_net_socket$bt_sco", 0, (syscall_t)syz_init_net_socket}, |
