diff --git a/src/core/agent.c b/src/core/agent.c index bf771b526de12016a5a66d7f75f32e21434b34f6..44a1cb2c1261af2f3de2b8351e63492192e32b02 100644 --- a/src/core/agent.c +++ b/src/core/agent.c @@ -1389,8 +1389,8 @@ static void wifi_sta_event_handler(void *c, struct blob_attr *msg) if (!tb[0] || !tb[1] || !tb[2]) return; - strncpy(ifname, blobmsg_data(tb[0]), sizeof(ifname)); - strncpy(event, blobmsg_data(tb[1]), sizeof(event)); + strncpy(ifname, blobmsg_data(tb[0]), sizeof(ifname) - 1); + strncpy(event, blobmsg_data(tb[1]), sizeof(event) - 1); add = !strcmp(event, "connected"); del = !strcmp(event, "disconnected"); @@ -1410,8 +1410,9 @@ static void wifi_sta_event_handler(void *c, struct blob_attr *msg) if (!data[0] || !data[1]) return; - strncpy(mac_str, blobmsg_data(data[0]), sizeof(mac_str)); - strncpy(bssid_str, blobmsg_data(data[1]), sizeof(bssid_str)); + strncpy(mac_str, blobmsg_data(data[0]), sizeof(mac_str) - 1); + strncpy(bssid_str, blobmsg_data(data[1]), + sizeof(bssid_str) - 1); if (!hwaddr_aton(mac_str, mac)) return; @@ -1440,8 +1441,9 @@ static void wifi_sta_event_handler(void *c, struct blob_attr *msg) if (!data[0] || !data[1] || !data[2]) return; - strncpy(mac_str, blobmsg_data(data[0]), sizeof(mac_str)); - strncpy(bssid_str, blobmsg_data(data[1]), sizeof(bssid_str)); + strncpy(mac_str, blobmsg_data(data[0]), sizeof(mac_str) - 1); + strncpy(bssid_str, blobmsg_data(data[1]), + sizeof(bssid_str) - 1); status = atoi(blobmsg_data(data[2])); @@ -1472,7 +1474,7 @@ static void wifi_sta_event_handler(void *c, struct blob_attr *msg) blobmsg_parse(data_attr, 1, data, blobmsg_data(tb[2]), blobmsg_data_len(tb[2])); - strncpy(mac_str, blobmsg_data(data[0]), sizeof(mac_str)); + strncpy(mac_str, blobmsg_data(data[0]), sizeof(mac_str) - 1); if (!hwaddr_aton(mac_str, mac)) return; @@ -1742,8 +1744,8 @@ static void wifi_bsta_event_handler(void *c, struct blob_attr *msg) if (!tb[0] || !tb[1] || !tb[2]) return; - strncpy(ifname, blobmsg_data(tb[0]), sizeof(ifname)); - strncpy(event, blobmsg_data(tb[1]), sizeof(event)); + strncpy(ifname, blobmsg_data(tb[0]), sizeof(ifname) - 1); + strncpy(event, blobmsg_data(tb[1]), sizeof(event) - 1); if (tb[2]) { struct blob_attr *data[1]; @@ -1754,7 +1756,8 @@ static void wifi_bsta_event_handler(void *c, struct blob_attr *msg) blobmsg_parse(data_attr, 1, data, blobmsg_data(tb[2]), blobmsg_data_len(tb[2])); - strncpy(bssid_str, blobmsg_data(data[0]), sizeof(bssid_str)); + strncpy(bssid_str, blobmsg_data(data[0]), + sizeof(bssid_str) - 1); } bk = find_bkhaul_by_ifname(a, ifname); @@ -1821,10 +1824,10 @@ static void wifi_wps_creds_event_handler(void *c, struct blob_attr *msg) if (!tb[0] || !tb[1] || !tb[2] || !tb[3]) return; - strncpy(ifname, blobmsg_data(tb[0]), sizeof(ifname)); - strncpy(encryption, blobmsg_data(tb[1]), sizeof(encryption)); - strncpy(ssid, blobmsg_data(tb[2]), sizeof(ssid)); - strncpy(key, blobmsg_data(tb[3]), sizeof(key)); + strncpy(ifname, blobmsg_data(tb[0]), sizeof(ifname) - 1); + strncpy(encryption, blobmsg_data(tb[1]), sizeof(encryption) - 1); + strncpy(ssid, blobmsg_data(tb[2]), sizeof(ssid) - 1); + strncpy(key, blobmsg_data(tb[3]), sizeof(key) - 1); wifi_apply_iface_cfg(ifname, encryption, ssid, key); }