diff --git a/src/agent.c b/src/agent.c index 9b68419886189eb18b89da115a6f4330763a3da0..2c97ce3ec9f6c3a28b2e0e24247558f7b26efd11 100644 --- a/src/agent.c +++ b/src/agent.c @@ -369,15 +369,14 @@ static void wifiagent_log_steer(struct agent *a, { char ev[512] = {0}; unsigned char macaddr[6] = {0}; - char ifname[16] = {0}; + char ifname[IFNAMSIZ] = {0}; char type[32] = {0}; if (!stamac || !vifname || !steer_type) return; memcpy(macaddr, stamac, 6); - strncpy(ifname, vifname, 16); - ifname[15] = '\0'; + strncpy(ifname, vifname, IFNAMSIZ - 1); strncpy(type, steer_type, 31); snprintf(ev, sizeof(ev), "{\"macaddr\":\""MACFMT"\"" @@ -3004,7 +3003,7 @@ char *agent_get_backhaul_ifname(struct agent *a, char *ifname) if (!tb[0]) goto out; - strncpy(ifname, blobmsg_data(tb[0]), IFNAMSIZ); + strncpy(ifname, blobmsg_data(tb[0]), IFNAMSIZ - 1); if (tb[1]) { uint8_t macaddr[6] = {0}; diff --git a/src/agent_map.c b/src/agent_map.c index 46c610a078bae4c1b03a4e73e59b482c20e49c93..da683d5e7d1c974d0eee0c9f2c03c71893b59974 100644 --- a/src/agent_map.c +++ b/src/agent_map.c @@ -661,7 +661,7 @@ int handle_topology_discovery(void *agent, struct cmdu_buff *cmdu, }; struct tlv *tv[2][TLV_MAXNUM] = {0}; int ret = -1; - char ul_ifname[16] = {0}; + char ul_ifname[IFNAMSIZ] = {0}; struct blob_buf bk = {0}; struct blob_attr *tb[3]; uint8_t almac[6] = {0}; @@ -716,7 +716,7 @@ int handle_topology_discovery(void *agent, struct cmdu_buff *cmdu, if (!tb[0]) goto out; - strncpy(ul_ifname, blobmsg_data(tb[0]), IFNAMSIZ); + strncpy(ul_ifname, blobmsg_data(tb[0]), IFNAMSIZ - 1); if (!strncmp(ul_ifname, cmdu->dev_ifname, IFNAMSIZ)) { memcpy(a->ul_dev.ul_almac, almac, 6); @@ -796,7 +796,7 @@ int handle_topology_query(void *agent, struct cmdu_buff *cmdu, struct node *n) if (hwaddr_is_zero(resp->origin)) { memcpy(resp->origin, cmdu->dev_macaddr, 6); - strncpy(resp->dev_ifname, cmdu->dev_ifname, 15); + strncpy(resp->dev_ifname, cmdu->dev_ifname, IFNAMSIZ - 1); } ret = CMDU_HOOK(a, cmdu_get_type(resp), cmdu_get_mid(resp), diff --git a/src/agent_ubus.c b/src/agent_ubus.c index ea298a8d558f7bb3fb1306ddac3c6b546b27e62f..72580591218b653de86428c236eef3dcb7cee38c 100644 --- a/src/agent_ubus.c +++ b/src/agent_ubus.c @@ -700,7 +700,7 @@ static int topology_query(struct ubus_context *ctx, struct ubus_object *obj, strncpy(agent, blobmsg_data(tb[TOPOLOGY_QUERY_AGENT]), sizeof(agent) - 1); } else { - strncpy(agent, MULTICAST_ADDR_STR, 18); + strncpy(agent, MULTICAST_ADDR_STR, sizeof(agent)); } if (!hwaddr_aton(agent, agent_mac)) return UBUS_STATUS_UNKNOWN_ERROR; diff --git a/src/config.c b/src/config.c index e33eee04e35b581262d0fce016baa6ecae80cf97..644110f896c318e9a0fd4b59f070c848753b18c5 100644 --- a/src/config.c +++ b/src/config.c @@ -2252,8 +2252,8 @@ static int agent_config_get_wifi_radio(struct agent_config *a, list_add_tail(&n->list, &a->radiolist); } - strncpy(n->name, ifname, 16); - n->name[15] = '\0'; + strncpy(n->name, ifname, IFNAMSIZ - 1); + n->name[IFNAMSIZ - 1] = '\0'; if (band == 2) { n->band = BAND_2; rcpi_threshold = 70; @@ -3841,7 +3841,7 @@ int config_calc_ifname(struct agent_config *cfg, strncat(fmt, "%hhu", sizeof(fmt) - strlen(fmt) - 1); } else { /* legacy: option netdev 'wl' (or 'wlan') */ - strncpy(fmt, cfg->netdev, sizeof(fmt)); + strncpy(fmt, cfg->netdev, IFNAMSIZ - 1); snprintf(ifname, IFNAMSIZ, "%s", cfg->netdev); snprintf(ifname + strlen(ifname), IFNAMSIZ, "%hhu", dev_num); if (index > 0) { diff --git a/src/dpp.c b/src/dpp.c index 239dfb52b4e7249206d9d312de66576cc436fc4a..bdc4886e3a1d1fa74c96de65176d139bae4e352f 100644 --- a/src/dpp.c +++ b/src/dpp.c @@ -179,7 +179,7 @@ char *agent_get_backhaul_hex(struct agent *a, enum wifi_band band, str2hex(ssid, strlen(ssid), hex_ssid); str2hex(key, strlen(key), hex_key); - strncpy(encryption, ap->cfg->encryption, 32); + strncpy(encryption, ap->cfg->encryption, 31); ifname = (char *)ap->cfg->name; break; } @@ -392,7 +392,7 @@ int dpp_gen_uri_wifi(struct netif_bk *bk) if (!strlen(buf)) return -1; - strncpy(p->uri, buf, sizeof(p->uri)); + strncpy(p->uri, buf, sizeof(p->uri) - 1); warn("|%s:%d| ifname:%s added uri:%s\n", __func__, __LINE__, p->ifname, p->uri); /* TODO: write to UCI */ @@ -1001,14 +1001,14 @@ void dpp_enrollee_evh(void *agent, struct blob_attr *msg) warn("|%s:%d| dpp-confobj-akm:%s\n", __func__, __LINE__, data); - strncpy(akm, data, sizeof(creds->akm)); + strncpy(akm, data, sizeof(creds->akm) - 1); creds->stored |= DPP_CONFOBJ_AKM; } else if (!strcmp(event, "dpp-confobj-ssid")) { char *ssid = creds->ssid; warn("|%s:%d| dpp-confobj-ssid:%s\n", __func__, __LINE__, data); - strncpy(ssid, data, sizeof(creds->ssid)); + strncpy(ssid, data, sizeof(creds->ssid) - 1); creds->stored |= DPP_CONFOBJ_SSID; } else if (!strcmp(event, "dpp-confobj-pass")) { char *key; @@ -1024,7 +1024,7 @@ void dpp_enrollee_evh(void *agent, struct blob_attr *msg) warn("|%s:%d| dpp-confobj-pass:%s\n", __func__, __LINE__, data); warn("|%s:%d| dpp-confobj-pass-ascii:%s\n", __func__, __LINE__, key); - strncpy(creds->key, key, sizeof(creds->key)); + strncpy(creds->key, key, sizeof(creds->key) - 1); creds->stored |= DPP_CONFOBJ_KEY; } else if (!strcmp(event, "dpp-connector")) { int len = strlen(data); diff --git a/src/dynbh/dynbh.c b/src/dynbh/dynbh.c index 65ff1d0627ca324a3fa04f471875b7241b1cef58..bf27a01ce3aa732a30010e352689e43377455f3b 100644 --- a/src/dynbh/dynbh.c +++ b/src/dynbh/dynbh.c @@ -218,7 +218,7 @@ struct ethport *alloc_ethport_search(struct mapclient_private *priv, if (!ap) return NULL; - strncpy(ap->ifname, ifname, 16); + strncpy(ap->ifname, ifname, sizeof(ap->ifname) - 1); timer_init(&ap->send_query, send_query_cb); timer_init(&ap->bridge_add, bridge_readd); list_add_tail(&ap->list, &priv->ethportlist); @@ -380,7 +380,8 @@ static char *agent_get_backhaul_ifname(char *ifname) if (!tb[0]) goto out; - strncpy(ifname, blobmsg_data(tb[0]), 16); + strncpy(ifname, blobmsg_data(tb[0]), 15); + ifname[15] = '\0'; blob_buf_free(&bk); return ifname; diff --git a/src/nl.c b/src/nl.c index 2cb3d2acdb2ffecc06988512d2cd16d2440558f5..c83a225d2ae23f57ed9a1ce274b87f45f509fb86 100644 --- a/src/nl.c +++ b/src/nl.c @@ -79,7 +79,7 @@ static struct ts_iface *ts_configure_iface(struct ts_context *ts, for (i = 0; i < TS_IFACE_MAX_NUM; i++) { tsif = &ts->iface_array[i]; if (tsif->name[0] == '\0') { - strncpy(tsif->name, ifname, IFNAMSIZ); + strncpy(tsif->name, ifname, IFNAMSIZ - 1); ts->check_tags = true; break; } @@ -307,7 +307,7 @@ static void ts_set_system(struct ts_context *ts) if (ts->primary_vid == 0) return; - strncpy(cmd, "/lib/wifi/multiap ts keep", sizeof(cmd)); + strncpy(cmd, "/lib/wifi/multiap ts keep", sizeof(cmd) - 1); for (i = 0; i < ts->num_vids; i++) { vid = ts->all_vids[i]; @@ -372,7 +372,7 @@ int if_updown(const char *ifname, bool up) } memset(&ifr, 0, sizeof(ifr)); - strncpy(ifr.ifr_name, ifname, IFNAMSIZ); + strncpy(ifr.ifr_name, ifname, IFNAMSIZ - 1); if (ioctl(fd, SIOCGIFFLAGS, &ifr) != 0) { close(fd);