diff options
Diffstat (limited to 'executor')
| -rw-r--r-- | executor/common_linux.h | 44 |
1 files changed, 23 insertions, 21 deletions
diff --git a/executor/common_linux.h b/executor/common_linux.h index 85f9b966a..950c43096 100644 --- a/executor/common_linux.h +++ b/executor/common_linux.h @@ -312,8 +312,7 @@ static int netlink_send_ext(struct nlmsg* nlmsg, int sock, return -errno; } -#if SYZ_EXECUTOR || SYZ_NET_DEVICES || SYZ_NET_INJECTION || SYZ_DEVLINK_PCI || SYZ_WIFI || SYZ_802154 || \ - __NR_syz_80211_join_ibss || __NR_syz_80211_inject_frame +#if SYZ_EXECUTOR || SYZ_NET_DEVICES || SYZ_NET_INJECTION || SYZ_DEVLINK_PCI || SYZ_WIFI || SYZ_802154 static int netlink_send(struct nlmsg* nlmsg, int sock) { return netlink_send_ext(nlmsg, sock, 0, NULL, true); @@ -946,7 +945,8 @@ static int set_interface_state(const char* interface_name, int on) return 0; } -static int nl80211_set_interface(struct nlmsg* nlmsg, int sock, int nl80211_family, uint32 ifindex, uint32 iftype) +static int nl80211_set_interface(struct nlmsg* nlmsg, int sock, int nl80211_family, uint32 ifindex, + uint32 iftype, bool dofail) { struct genlmsghdr genlhdr; @@ -955,14 +955,15 @@ static int nl80211_set_interface(struct nlmsg* nlmsg, int sock, int nl80211_fami netlink_init(nlmsg, nl80211_family, 0, &genlhdr, sizeof(genlhdr)); netlink_attr(nlmsg, NL80211_ATTR_IFINDEX, &ifindex, sizeof(ifindex)); netlink_attr(nlmsg, NL80211_ATTR_IFTYPE, &iftype, sizeof(iftype)); - int err = netlink_send(nlmsg, sock); + int err = netlink_send_ext(nlmsg, sock, 0, NULL, dofail); if (err < 0) { debug("nl80211_set_interface failed: %s\n", strerror(errno)); } return err; } -static int nl80211_join_ibss(struct nlmsg* nlmsg, int sock, int nl80211_family, uint32 ifindex, struct join_ibss_props* props) +static int nl80211_join_ibss(struct nlmsg* nlmsg, int sock, int nl80211_family, uint32 ifindex, + struct join_ibss_props* props, bool dofail) { struct genlmsghdr genlhdr; @@ -976,14 +977,14 @@ static int nl80211_join_ibss(struct nlmsg* nlmsg, int sock, int nl80211_family, netlink_attr(nlmsg, NL80211_ATTR_MAC, props->mac, ETH_ALEN); if (props->wiphy_freq_fixed) netlink_attr(nlmsg, NL80211_ATTR_FREQ_FIXED, NULL, 0); - int err = netlink_send(nlmsg, sock); + int err = netlink_send_ext(nlmsg, sock, 0, NULL, dofail); if (err < 0) { debug("nl80211_join_ibss failed: %s\n", strerror(errno)); } return err; } -static int get_ifla_operstate(struct nlmsg* nlmsg, int ifindex) +static int get_ifla_operstate(struct nlmsg* nlmsg, int ifindex, bool dofail) { struct ifinfomsg info; memset(&info, 0, sizeof(info)); @@ -998,7 +999,7 @@ static int get_ifla_operstate(struct nlmsg* nlmsg, int ifindex) netlink_init(nlmsg, RTM_GETLINK, 0, &info, sizeof(info)); int n; - int err = netlink_send_ext(nlmsg, sock, RTM_NEWLINK, &n, true); + int err = netlink_send_ext(nlmsg, sock, RTM_NEWLINK, &n, dofail); close(sock); if (err) { @@ -1015,12 +1016,12 @@ static int get_ifla_operstate(struct nlmsg* nlmsg, int ifindex) return -1; } -static int await_ifla_operstate(struct nlmsg* nlmsg, char* interface, int operstate) +static int await_ifla_operstate(struct nlmsg* nlmsg, char* interface, int operstate, bool dofail) { int ifindex = if_nametoindex(interface); while (true) { usleep(1000); // 1 ms - int ret = get_ifla_operstate(nlmsg, ifindex); + int ret = get_ifla_operstate(nlmsg, ifindex, dofail); if (ret < 0) return ret; if (ret == operstate) @@ -1029,7 +1030,8 @@ static int await_ifla_operstate(struct nlmsg* nlmsg, char* interface, int operst return 0; } -static int nl80211_setup_ibss_interface(struct nlmsg* nlmsg, int sock, int nl80211_family_id, char* interface, struct join_ibss_props* ibss_props) +static int nl80211_setup_ibss_interface(struct nlmsg* nlmsg, int sock, int nl80211_family_id, char* interface, + struct join_ibss_props* ibss_props, bool dofail) { int ifindex = if_nametoindex(interface); if (ifindex == 0) { @@ -1037,7 +1039,7 @@ static int nl80211_setup_ibss_interface(struct nlmsg* nlmsg, int sock, int nl802 return -1; } - int ret = nl80211_set_interface(nlmsg, sock, nl80211_family_id, ifindex, NL80211_IFTYPE_ADHOC); + int ret = nl80211_set_interface(nlmsg, sock, nl80211_family_id, ifindex, NL80211_IFTYPE_ADHOC, dofail); if (ret < 0) { debug("nl80211_setup_ibss_interface: nl80211_set_interface failed for %.32s, ret %d\n", interface, ret); return -1; @@ -1049,7 +1051,7 @@ static int nl80211_setup_ibss_interface(struct nlmsg* nlmsg, int sock, int nl802 return -1; } - ret = nl80211_join_ibss(nlmsg, sock, nl80211_family_id, ifindex, ibss_props); + ret = nl80211_join_ibss(nlmsg, sock, nl80211_family_id, ifindex, ibss_props, dofail); if (ret < 0) { debug("nl80211_setup_ibss_interface: nl80211_join_ibss failed for %.32s, ret %d\n", interface, ret); return -1; @@ -1135,7 +1137,7 @@ static void initialize_wifi_devices(void) char interface[6] = "wlan0"; interface[4] += device_id; - if (nl80211_setup_ibss_interface(&nlmsg, sock, nl80211_family_id, interface, &ibss_props) < 0) + if (nl80211_setup_ibss_interface(&nlmsg, sock, nl80211_family_id, interface, &ibss_props, true) < 0) failmsg("initialize_wifi_devices: failed set up IBSS network", "device=%d", device_id); } @@ -1143,7 +1145,7 @@ static void initialize_wifi_devices(void) for (int device_id = 0; device_id < WIFI_INITIAL_DEVICE_COUNT; device_id++) { char interface[6] = "wlan0"; interface[4] += device_id; - int ret = await_ifla_operstate(&nlmsg, interface, IF_OPER_UP); + int ret = await_ifla_operstate(&nlmsg, interface, IF_OPER_UP, true); if (ret < 0) failmsg("initialize_wifi_devices: get_ifla_operstate failed", "device=%d, ret=%d", device_id, ret); @@ -5393,7 +5395,7 @@ static int hwsim_register_socket(struct nlmsg* nlmsg, int sock, int hwsim_family memset(&genlhdr, 0, sizeof(genlhdr)); genlhdr.cmd = HWSIM_CMD_REGISTER; netlink_init(nlmsg, hwsim_family, 0, &genlhdr, sizeof(genlhdr)); - int err = netlink_send(nlmsg, sock); + int err = netlink_send_ext(nlmsg, sock, 0, NULL, false); if (err < 0) { debug("hwsim_register_device failed: %s\n", strerror(errno)); } @@ -5413,7 +5415,7 @@ static int hwsim_inject_frame(struct nlmsg* nlmsg, int sock, int hwsim_family, u netlink_attr(nlmsg, HWSIM_ATTR_SIGNAL, &signal, sizeof(signal)); netlink_attr(nlmsg, HWSIM_ATTR_ADDR_RECEIVER, mac_addr, ETH_ALEN); netlink_attr(nlmsg, HWSIM_ATTR_FRAME, data, len); - int err = netlink_send(nlmsg, sock); + int err = netlink_send_ext(nlmsg, sock, 0, NULL, false); if (err < 0) { debug("hwsim_inject_frame failed: %s\n", strerror(errno)); } @@ -5438,7 +5440,7 @@ static long syz_80211_inject_frame(volatile long a0, volatile long a1, volatile return -1; } - int hwsim_family_id = netlink_query_family_id(&tmp_msg, sock, "MAC80211_HWSIM", true); + int hwsim_family_id = netlink_query_family_id(&tmp_msg, sock, "MAC80211_HWSIM", false); int ret = hwsim_register_socket(&tmp_msg, sock, hwsim_family_id); if (ret < 0) { debug("syz_80211_inject_frame: failed to register socket, ret %d\n", ret); @@ -5492,7 +5494,7 @@ static long syz_80211_join_ibss(volatile long a0, volatile long a1, volatile lon return -1; } - int nl80211_family_id = netlink_query_family_id(&tmp_msg, sock, "nl80211", true); + int nl80211_family_id = netlink_query_family_id(&tmp_msg, sock, "nl80211", false); struct join_ibss_props ibss_props = { .wiphy_freq = WIFI_DEFAULT_FREQUENCY, .wiphy_freq_fixed = (mode == WIFI_JOIN_IBSS_NO_SCAN || mode == WIFI_JOIN_IBSS_BG_NO_SCAN), @@ -5500,7 +5502,7 @@ static long syz_80211_join_ibss(volatile long a0, volatile long a1, volatile lon .ssid = ssid, .ssid_len = ssid_len}; - int ret = nl80211_setup_ibss_interface(&tmp_msg, sock, nl80211_family_id, interface, &ibss_props); + int ret = nl80211_setup_ibss_interface(&tmp_msg, sock, nl80211_family_id, interface, &ibss_props, false); close(sock); if (ret < 0) { debug("syz_80211_join_ibss: failed set up IBSS network for %.32s\n", interface); @@ -5508,7 +5510,7 @@ static long syz_80211_join_ibss(volatile long a0, volatile long a1, volatile lon } if (mode == WIFI_JOIN_IBSS_NO_SCAN) { - ret = await_ifla_operstate(&tmp_msg, interface, IF_OPER_UP); + ret = await_ifla_operstate(&tmp_msg, interface, IF_OPER_UP, false); if (ret < 0) { debug("syz_80211_join_ibss: await_ifla_operstate failed for %.32s, ret %d\n", interface, ret); return -1; |
