From 1ffa7b1e771dad7944976c721ed61a0762d7b65f Mon Sep 17 00:00:00 2001 From: Christoph Paasch Date: Fri, 31 Jan 2020 15:51:09 -0800 Subject: sys/linux: mptcp: Add netlink-API for MPTCP path-management MPTCP exposes a generic netlink API to control address advertisement and subflow-creation. syzkaller should make use of this interface. --- sys/linux/socket_netlink_generic_mptcp.txt | 40 ++++++++++++++++++++++ sys/linux/socket_netlink_generic_mptcp_386.const | 23 +++++++++++++ sys/linux/socket_netlink_generic_mptcp_amd64.const | 23 +++++++++++++ sys/linux/socket_netlink_generic_mptcp_arm.const | 23 +++++++++++++ sys/linux/socket_netlink_generic_mptcp_arm64.const | 23 +++++++++++++ .../socket_netlink_generic_mptcp_mips64le.const | 23 +++++++++++++ .../socket_netlink_generic_mptcp_ppc64le.const | 23 +++++++++++++ 7 files changed, 178 insertions(+) create mode 100644 sys/linux/socket_netlink_generic_mptcp.txt create mode 100644 sys/linux/socket_netlink_generic_mptcp_386.const create mode 100644 sys/linux/socket_netlink_generic_mptcp_amd64.const create mode 100644 sys/linux/socket_netlink_generic_mptcp_arm.const create mode 100644 sys/linux/socket_netlink_generic_mptcp_arm64.const create mode 100644 sys/linux/socket_netlink_generic_mptcp_mips64le.const create mode 100644 sys/linux/socket_netlink_generic_mptcp_ppc64le.const (limited to 'sys/linux') diff --git a/sys/linux/socket_netlink_generic_mptcp.txt b/sys/linux/socket_netlink_generic_mptcp.txt new file mode 100644 index 000000000..a0ea0351a --- /dev/null +++ b/sys/linux/socket_netlink_generic_mptcp.txt @@ -0,0 +1,40 @@ +# Copyright 2020 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_NETLINK/NETLINK_GENERIC/mptcp support. + +include +include +include +include + +resource genl_mptcp_family_id[int16] +type msghdr_nl_mptcp[CMD] msghdr_netlink[netlink_msg_t[genl_mptcp_family_id, genlmsghdr_t[CMD], mptcp_pm_policy]] + +syz_genetlink_get_family_id$mptcp(name ptr[in, string["mptcp_pm"]]) genl_mptcp_family_id + +sendmsg$MPTCP_PM_CMD_ADD_ADDR(fd sock_nl_generic, msg ptr[in, msghdr_nl_mptcp[MPTCP_PM_CMD_ADD_ADDR]], f flags[send_flags]) +sendmsg$MPTCP_PM_CMD_DEL_ADDR(fd sock_nl_generic, msg ptr[in, msghdr_nl_mptcp[MPTCP_PM_CMD_DEL_ADDR]], f flags[send_flags]) +sendmsg$MPTCP_PM_CMD_GET_ADDR(fd sock_nl_generic, msg ptr[in, msghdr_nl_mptcp[MPTCP_PM_CMD_GET_ADDR]], f flags[send_flags]) +sendmsg$MPTCP_PM_CMD_FLUSH_ADDRS(fd sock_nl_generic, msg ptr[in, msghdr_nl_mptcp[MPTCP_PM_CMD_FLUSH_ADDRS]], f flags[send_flags]) +sendmsg$MPTCP_PM_CMD_SET_LIMITS(fd sock_nl_generic, msg ptr[in, msghdr_nl_mptcp[MPTCP_PM_CMD_SET_LIMITS]], f flags[send_flags]) +sendmsg$MPTCP_PM_CMD_GET_LIMITS(fd sock_nl_generic, msg ptr[in, msghdr_nl_mptcp[MPTCP_PM_CMD_GET_LIMITS]], f flags[send_flags]) + +mptcp_pm_policy [ + MPTCP_PM_ATTR_ADDR nlnest[MPTCP_PM_ATTR_ADDR, array[mptcp_pm_addr_policy, 0:7]] + MPTCP_PM_ATTR_RCV_ADD_ADDRS nlattr[MPTCP_PM_ATTR_RCV_ADD_ADDRS, int32[0:8]] + MPTCP_PM_ATTR_SUBFLOWS nlattr[MPTCP_PM_ATTR_SUBFLOWS, int32[0:8]] +] [varlen] + +mptcp_pm_addr_policy [ + MPTCP_PM_ADDR_ATTR_FAMILY nlattr[MPTCP_PM_ADDR_ATTR_FAMILY, flags[mptcp_families, int16]] + MPTCP_PM_ADDR_ATTR_ID nlattr[MPTCP_PM_ADDR_ATTR_ID, int8] + MPTCP_PM_ADDR_ATTR_ADDR4 nlattr[MPTCP_PM_ADDR_ATTR_ADDR4, ipv4_addr] + MPTCP_PM_ADDR_ATTR_ADDR6 nlattr[MPTCP_PM_ADDR_ATTR_ADDR6, ipv6_addr] + MPTCP_PM_ADDR_ATTR_PORT nlattr[MPTCP_PM_ADDR_ATTR_PORT, sock_port] + MPTCP_PM_ADDR_ATTR_FLAGS nlattr[MPTCP_PM_ADDR_ATTR_FLAGS, flags[mptcp_pm_addr_flags, int32]] + MPTCP_PM_ADDR_ATTR_IF_IDX nlattr[MPTCP_PM_ADDR_ATTR_IF_IDX, ifindex] +] [varlen] + +mptcp_families = AF_INET, AF_INET6 +mptcp_pm_addr_flags = MPTCP_PM_ADDR_FLAG_SIGNAL, MPTCP_PM_ADDR_FLAG_SUBFLOW, MPTCP_PM_ADDR_FLAG_BACKUP diff --git a/sys/linux/socket_netlink_generic_mptcp_386.const b/sys/linux/socket_netlink_generic_mptcp_386.const new file mode 100644 index 000000000..d32dd32d7 --- /dev/null +++ b/sys/linux/socket_netlink_generic_mptcp_386.const @@ -0,0 +1,23 @@ +# AUTOGENERATED FILE +AF_INET = 2 +AF_INET6 = 10 +MPTCP_PM_ADDR_ATTR_ADDR4 = 3 +MPTCP_PM_ADDR_ATTR_ADDR6 = 4 +MPTCP_PM_ADDR_ATTR_FAMILY = 1 +MPTCP_PM_ADDR_ATTR_FLAGS = 6 +MPTCP_PM_ADDR_ATTR_ID = 2 +MPTCP_PM_ADDR_ATTR_IF_IDX = 7 +MPTCP_PM_ADDR_ATTR_PORT = 5 +MPTCP_PM_ADDR_FLAG_BACKUP = 4 +MPTCP_PM_ADDR_FLAG_SIGNAL = 1 +MPTCP_PM_ADDR_FLAG_SUBFLOW = 2 +MPTCP_PM_ATTR_ADDR = 1 +MPTCP_PM_ATTR_RCV_ADD_ADDRS = 2 +MPTCP_PM_ATTR_SUBFLOWS = 3 +MPTCP_PM_CMD_ADD_ADDR = 1 +MPTCP_PM_CMD_DEL_ADDR = 2 +MPTCP_PM_CMD_FLUSH_ADDRS = 4 +MPTCP_PM_CMD_GET_ADDR = 3 +MPTCP_PM_CMD_GET_LIMITS = 6 +MPTCP_PM_CMD_SET_LIMITS = 5 +__NR_sendmsg = 370 diff --git a/sys/linux/socket_netlink_generic_mptcp_amd64.const b/sys/linux/socket_netlink_generic_mptcp_amd64.const new file mode 100644 index 000000000..70f7bd8ba --- /dev/null +++ b/sys/linux/socket_netlink_generic_mptcp_amd64.const @@ -0,0 +1,23 @@ +# AUTOGENERATED FILE +AF_INET = 2 +AF_INET6 = 10 +MPTCP_PM_ADDR_ATTR_ADDR4 = 3 +MPTCP_PM_ADDR_ATTR_ADDR6 = 4 +MPTCP_PM_ADDR_ATTR_FAMILY = 1 +MPTCP_PM_ADDR_ATTR_FLAGS = 6 +MPTCP_PM_ADDR_ATTR_ID = 2 +MPTCP_PM_ADDR_ATTR_IF_IDX = 7 +MPTCP_PM_ADDR_ATTR_PORT = 5 +MPTCP_PM_ADDR_FLAG_BACKUP = 4 +MPTCP_PM_ADDR_FLAG_SIGNAL = 1 +MPTCP_PM_ADDR_FLAG_SUBFLOW = 2 +MPTCP_PM_ATTR_ADDR = 1 +MPTCP_PM_ATTR_RCV_ADD_ADDRS = 2 +MPTCP_PM_ATTR_SUBFLOWS = 3 +MPTCP_PM_CMD_ADD_ADDR = 1 +MPTCP_PM_CMD_DEL_ADDR = 2 +MPTCP_PM_CMD_FLUSH_ADDRS = 4 +MPTCP_PM_CMD_GET_ADDR = 3 +MPTCP_PM_CMD_GET_LIMITS = 6 +MPTCP_PM_CMD_SET_LIMITS = 5 +__NR_sendmsg = 46 diff --git a/sys/linux/socket_netlink_generic_mptcp_arm.const b/sys/linux/socket_netlink_generic_mptcp_arm.const new file mode 100644 index 000000000..6be8fdd68 --- /dev/null +++ b/sys/linux/socket_netlink_generic_mptcp_arm.const @@ -0,0 +1,23 @@ +# AUTOGENERATED FILE +AF_INET = 2 +AF_INET6 = 10 +MPTCP_PM_ADDR_ATTR_ADDR4 = 3 +MPTCP_PM_ADDR_ATTR_ADDR6 = 4 +MPTCP_PM_ADDR_ATTR_FAMILY = 1 +MPTCP_PM_ADDR_ATTR_FLAGS = 6 +MPTCP_PM_ADDR_ATTR_ID = 2 +MPTCP_PM_ADDR_ATTR_IF_IDX = 7 +MPTCP_PM_ADDR_ATTR_PORT = 5 +MPTCP_PM_ADDR_FLAG_BACKUP = 4 +MPTCP_PM_ADDR_FLAG_SIGNAL = 1 +MPTCP_PM_ADDR_FLAG_SUBFLOW = 2 +MPTCP_PM_ATTR_ADDR = 1 +MPTCP_PM_ATTR_RCV_ADD_ADDRS = 2 +MPTCP_PM_ATTR_SUBFLOWS = 3 +MPTCP_PM_CMD_ADD_ADDR = 1 +MPTCP_PM_CMD_DEL_ADDR = 2 +MPTCP_PM_CMD_FLUSH_ADDRS = 4 +MPTCP_PM_CMD_GET_ADDR = 3 +MPTCP_PM_CMD_GET_LIMITS = 6 +MPTCP_PM_CMD_SET_LIMITS = 5 +__NR_sendmsg = 296 diff --git a/sys/linux/socket_netlink_generic_mptcp_arm64.const b/sys/linux/socket_netlink_generic_mptcp_arm64.const new file mode 100644 index 000000000..3a20abaaf --- /dev/null +++ b/sys/linux/socket_netlink_generic_mptcp_arm64.const @@ -0,0 +1,23 @@ +# AUTOGENERATED FILE +AF_INET = 2 +AF_INET6 = 10 +MPTCP_PM_ADDR_ATTR_ADDR4 = 3 +MPTCP_PM_ADDR_ATTR_ADDR6 = 4 +MPTCP_PM_ADDR_ATTR_FAMILY = 1 +MPTCP_PM_ADDR_ATTR_FLAGS = 6 +MPTCP_PM_ADDR_ATTR_ID = 2 +MPTCP_PM_ADDR_ATTR_IF_IDX = 7 +MPTCP_PM_ADDR_ATTR_PORT = 5 +MPTCP_PM_ADDR_FLAG_BACKUP = 4 +MPTCP_PM_ADDR_FLAG_SIGNAL = 1 +MPTCP_PM_ADDR_FLAG_SUBFLOW = 2 +MPTCP_PM_ATTR_ADDR = 1 +MPTCP_PM_ATTR_RCV_ADD_ADDRS = 2 +MPTCP_PM_ATTR_SUBFLOWS = 3 +MPTCP_PM_CMD_ADD_ADDR = 1 +MPTCP_PM_CMD_DEL_ADDR = 2 +MPTCP_PM_CMD_FLUSH_ADDRS = 4 +MPTCP_PM_CMD_GET_ADDR = 3 +MPTCP_PM_CMD_GET_LIMITS = 6 +MPTCP_PM_CMD_SET_LIMITS = 5 +__NR_sendmsg = 211 diff --git a/sys/linux/socket_netlink_generic_mptcp_mips64le.const b/sys/linux/socket_netlink_generic_mptcp_mips64le.const new file mode 100644 index 000000000..e0bcf7b47 --- /dev/null +++ b/sys/linux/socket_netlink_generic_mptcp_mips64le.const @@ -0,0 +1,23 @@ +# AUTOGENERATED FILE +AF_INET = 2 +AF_INET6 = 10 +MPTCP_PM_ADDR_ATTR_ADDR4 = 3 +MPTCP_PM_ADDR_ATTR_ADDR6 = 4 +MPTCP_PM_ADDR_ATTR_FAMILY = 1 +MPTCP_PM_ADDR_ATTR_FLAGS = 6 +MPTCP_PM_ADDR_ATTR_ID = 2 +MPTCP_PM_ADDR_ATTR_IF_IDX = 7 +MPTCP_PM_ADDR_ATTR_PORT = 5 +MPTCP_PM_ADDR_FLAG_BACKUP = 4 +MPTCP_PM_ADDR_FLAG_SIGNAL = 1 +MPTCP_PM_ADDR_FLAG_SUBFLOW = 2 +MPTCP_PM_ATTR_ADDR = 1 +MPTCP_PM_ATTR_RCV_ADD_ADDRS = 2 +MPTCP_PM_ATTR_SUBFLOWS = 3 +MPTCP_PM_CMD_ADD_ADDR = 1 +MPTCP_PM_CMD_DEL_ADDR = 2 +MPTCP_PM_CMD_FLUSH_ADDRS = 4 +MPTCP_PM_CMD_GET_ADDR = 3 +MPTCP_PM_CMD_GET_LIMITS = 6 +MPTCP_PM_CMD_SET_LIMITS = 5 +__NR_sendmsg = 5045 diff --git a/sys/linux/socket_netlink_generic_mptcp_ppc64le.const b/sys/linux/socket_netlink_generic_mptcp_ppc64le.const new file mode 100644 index 000000000..032070891 --- /dev/null +++ b/sys/linux/socket_netlink_generic_mptcp_ppc64le.const @@ -0,0 +1,23 @@ +# AUTOGENERATED FILE +AF_INET = 2 +AF_INET6 = 10 +MPTCP_PM_ADDR_ATTR_ADDR4 = 3 +MPTCP_PM_ADDR_ATTR_ADDR6 = 4 +MPTCP_PM_ADDR_ATTR_FAMILY = 1 +MPTCP_PM_ADDR_ATTR_FLAGS = 6 +MPTCP_PM_ADDR_ATTR_ID = 2 +MPTCP_PM_ADDR_ATTR_IF_IDX = 7 +MPTCP_PM_ADDR_ATTR_PORT = 5 +MPTCP_PM_ADDR_FLAG_BACKUP = 4 +MPTCP_PM_ADDR_FLAG_SIGNAL = 1 +MPTCP_PM_ADDR_FLAG_SUBFLOW = 2 +MPTCP_PM_ATTR_ADDR = 1 +MPTCP_PM_ATTR_RCV_ADD_ADDRS = 2 +MPTCP_PM_ATTR_SUBFLOWS = 3 +MPTCP_PM_CMD_ADD_ADDR = 1 +MPTCP_PM_CMD_DEL_ADDR = 2 +MPTCP_PM_CMD_FLUSH_ADDRS = 4 +MPTCP_PM_CMD_GET_ADDR = 3 +MPTCP_PM_CMD_GET_LIMITS = 6 +MPTCP_PM_CMD_SET_LIMITS = 5 +__NR_sendmsg = 341 -- cgit mrf-deployment