diff --git a/src/cmdu.c b/src/cmdu.c
index 825c743d1514d8229738d2666b92b52b248e2ebe..13e972bf8a33dc434092d445bcc408eda4a9c6e8 100644
--- a/src/cmdu.c
+++ b/src/cmdu.c
@@ -313,9 +313,14 @@ int cmdu_put_tlv(struct cmdu_buff *c, struct tlv *t)
 		return -1;
 	}
 
-	*c->tail = t->type;
-	buf_put_be16(c->tail + 1, t->len);
-	memcpy(c->tail + 3, t->data, tlen);
+	if ((uint8_t *)t != c->tail) {
+		fprintf(stderr, "%s: tlv outside cmdu buffer; use cmdu_copy_tlv() instead\n",
+			__func__);
+		return -1;
+	}
+
+
+	buf_put_be16(c->tail + 1, tlen);
 	c->tail += tlen + sizeof(*t);
 	c->datalen += tlen + sizeof(*t);