diff --git a/src/agent.c b/src/agent.c
index 1ca65a857141ddbd60098bf88da39623a63ca094..1ec43cceca7a396015e56c966a8e04edada0f64f 100644
--- a/src/agent.c
+++ b/src/agent.c
@@ -2426,7 +2426,7 @@ static void check_protocol(const char *framestr, uint8_t *protocol)
 	int len;
 
 	len = strlen(framestr);
-	len = (len - 1)/2;
+	len = len / 2;
 	frame = calloc(len, sizeof(uint8_t));
 	if (!frame)
 		return;
@@ -3158,7 +3158,7 @@ static void wifi_sta_event_handler(void *c, struct blob_attr *msg)
 		framestr = (char *)blobmsg_data(data[1]);
 
 		len = strlen(framestr);
-		len = (len - 1) / 2;
+		len = len / 2;
 		frame = calloc(len, sizeof(uint8_t));
 		if (!frame)
 			return;
@@ -5986,8 +5986,8 @@ static void parse_beacon_params(struct ubus_request *req, int type,
 			int i, slen, esp_len;
 			int ac;		/* Access Category */
 
-			slen = strlen(iestr);
-			ie = calloc(slen/2, sizeof(uint8_t));
+			slen = strlen(iestr) / 2;
+			ie = calloc(slen, sizeof(uint8_t));
 			if (!ie) {
 				free(iestr);
 				return;
@@ -6037,8 +6037,8 @@ static void parse_beacon_params(struct ubus_request *req, int type,
 			uint8_t *ie;
 			int slen, len;
 
-			slen = strlen(iestr);
-			ie = calloc(slen / 2, sizeof(uint8_t));
+			slen = strlen(iestr) / 2;
+			ie = calloc(slen, sizeof(uint8_t));
 			if (!ie) {
 				free(iestr);
 				return;
diff --git a/src/agent_map.c b/src/agent_map.c
index 79d5e407e04dd901f06210cde64567b992ef655e..6b7716d60e7d6b5bcca6832fd8af405ccfbd46b0 100644
--- a/src/agent_map.c
+++ b/src/agent_map.c
@@ -6220,7 +6220,7 @@ int prepare_tunneled_message(void *agent, const char *ifname,
 		return -1;
 
 	len = strlen(framestr);
-	len = (len - 1) / 2;
+	len = len / 2;
 	frame = calloc(len, sizeof(uint8_t));
 	if (!frame)
 		return -1;
diff --git a/src/utils/1905_ubus.c b/src/utils/1905_ubus.c
index a5b3f176365142991cfb93692c0d739239f6174f..31604b597762ff35ef1b82aeb17b60e6b49e2850 100644
--- a/src/utils/1905_ubus.c
+++ b/src/utils/1905_ubus.c
@@ -76,9 +76,9 @@ static void ieee1905_ubus_buildcmdu_cb(struct ubus_request *req,
 	dbg("|%s:%d| type = %u data = %s\n", __func__, __LINE__,
 			cmdu_type, data);
 
-	b_len = (strlen(data)/2) - 3;
+	b_len = strlen(data) / 2;
 
-	tlv = (uint8_t *) calloc(1, b_len);
+	tlv = (uint8_t *)calloc(1, b_len);
 	if (!tlv) {
 		err("%s: No memory\n", __func__);
 		ctx->status = -1;
@@ -87,6 +87,7 @@ static void ieee1905_ubus_buildcmdu_cb(struct ubus_request *req,
 
 	strtob(data, b_len, tlv);
 
+	b_len = b_len - 3;
 	*buff = cmdu_alloc_custom(cmdu_type, &mid, NULL, origin,
 			tlv, b_len);
 	free(tlv);