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);
 }