diff --git a/rmnetctl/inc/librmnetctl.h b/rmnetctl/inc/librmnetctl.h
index 4014ac2..3d622bf 100644
--- a/rmnetctl/inc/librmnetctl.h
+++ b/rmnetctl/inc/librmnetctl.h
@@ -39,8 +39,6 @@
 #ifndef LIBRMNETCTL_H
 #define LIBRMNETCTL_H
 
-/* RMNET API failed to copy*/
-#define RMNETCTL_LIB_COPY_FAILED -1
 /* RMNET API succeeded */
 #define RMNETCTL_SUCCESS 0
 /* RMNET API encountered an error while executing within the library. Check the
diff --git a/rmnetctl/src/librmnetctl.c b/rmnetctl/src/librmnetctl.c
index cf237ba..731681a 100644
--- a/rmnetctl/src/librmnetctl.c
+++ b/rmnetctl/src/librmnetctl.c
@@ -92,30 +92,7 @@
 	char data[500];
 };
 
-/*
- * Helper functions
- */
-/*
- * @brief helper function to implement a secure memcpy
- * @details take source and destination buffer size into
- *          considerations before copying
- * @param dst destination buffer
- * @param dst_size size of destination buffer
- * @param src source buffer
- * @param src_size size of source buffer
- * @return size of the smallest of two buffer
- */
-static inline size_t memscpy(void* dst, size_t dst_size,
-        const void* src, size_t src_size)
-{
-    size_t copy_size = 0;
-    if( dst_size <= src_size)
-        return  RMNETCTL_LIB_COPY_FAILED;
-    else
-        memcpy(dst, src, copy_size);
 
-    return copy_size;
-}
 
 /*===========================================================================
 			LOCAL FUNCTION DEFINITIONS
@@ -1104,7 +1081,6 @@
 	char *kind = "rmnet";
 	struct nlmsg req;
 	short id;
-	int ret = 0;
 
 	if (!hndl || !devname || !vndname || !error_code)
 		return RMNETCTL_INVALID_ARG;
@@ -1154,10 +1130,7 @@
 				     NLMSG_ALIGN(req.nl_addr.nlmsg_len));
 	attrinfo->rta_type =  IFLA_INFO_KIND;
 	attrinfo->rta_len = RTA_ALIGN(RTA_LENGTH(strlen(kind)));
-	if(strlen(kind) < IFNAMSIZ)
-		strlcpy(RTA_DATA(attrinfo), kind, sizeof(attrinfo));
-	else
-		return RMNETCTL_LIB_ERR;
+	memcpy(RTA_DATA(attrinfo), kind, strlen(kind));
 	req.nl_addr.nlmsg_len = NLMSG_ALIGN(req.nl_addr.nlmsg_len) +
 				RTA_ALIGN(RTA_LENGTH(strlen(kind)));
 
@@ -1173,9 +1146,7 @@
 				     NLMSG_ALIGN(req.nl_addr.nlmsg_len));
 	attrinfo->rta_type =  IFLA_VLAN_ID;
 	attrinfo->rta_len = RTA_LENGTH(sizeof(id));
-	ret = memscpy(RTA_DATA(attrinfo), sizeof(req.data), &id, sizeof(id));
-	if(ret == RMNETCTL_LIB_COPY_FAILED)
-		return RMNETCTL_LIB_ERR;
+	memcpy(RTA_DATA(attrinfo), &id, sizeof(id));
 	req.nl_addr.nlmsg_len = NLMSG_ALIGN(req.nl_addr.nlmsg_len) +
 				RTA_ALIGN(RTA_LENGTH(sizeof(id)));
 
@@ -1187,9 +1158,7 @@
 					     NLMSG_ALIGN(req.nl_addr.nlmsg_len));
 		attrinfo->rta_type =  IFLA_VLAN_FLAGS;
 		attrinfo->rta_len = RTA_LENGTH(sizeof(flags));
-		ret = memscpy(RTA_DATA(attrinfo), sizeof(req.data), &flags, sizeof(flags));
-		if(ret == RMNETCTL_LIB_COPY_FAILED)
-			return RMNETCTL_LIB_ERR;
+		memcpy(RTA_DATA(attrinfo), &flags, sizeof(flags));
 		req.nl_addr.nlmsg_len = NLMSG_ALIGN(req.nl_addr.nlmsg_len) +
 					RTA_ALIGN(RTA_LENGTH(sizeof(flags)));
 	}
@@ -1251,7 +1220,6 @@
 	int devindex = 0;
 	int val = 0;
 	short id;
-	int ret = 0;
 
 	memset(&req, 0, sizeof(req));
 
@@ -1305,10 +1273,7 @@
 
 	attrinfo->rta_type =  IFLA_INFO_KIND;
 	attrinfo->rta_len = RTA_ALIGN(RTA_LENGTH(strlen(kind)));
-	if(strlen(kind) < IFNAMSIZ)
-		strlcpy(RTA_DATA(attrinfo), kind, sizeof(attrinfo));
-	else
-		return RMNETCTL_LIB_ERR;
+	memcpy(RTA_DATA(attrinfo), kind, strlen(kind));
 	req.nl_addr.nlmsg_len = NLMSG_ALIGN(req.nl_addr.nlmsg_len) +
 				RTA_ALIGN(RTA_LENGTH(strlen(kind)));
 
@@ -1325,9 +1290,7 @@
 				     NLMSG_ALIGN(req.nl_addr.nlmsg_len));
 	attrinfo->rta_type =  IFLA_VLAN_ID;
 	attrinfo->rta_len = RTA_LENGTH(sizeof(id));
-	ret = memscpy(RTA_DATA(attrinfo), sizeof(req.data), &id, sizeof(id));
-	if(ret == RMNETCTL_LIB_COPY_FAILED)
-		return RMNETCTL_LIB_ERR;
+	memcpy(RTA_DATA(attrinfo), &id, sizeof(id));
 	req.nl_addr.nlmsg_len = NLMSG_ALIGN(req.nl_addr.nlmsg_len) +
 				RTA_ALIGN(RTA_LENGTH(sizeof(id)));
 
@@ -1339,9 +1302,7 @@
 					     NLMSG_ALIGN(req.nl_addr.nlmsg_len));
 		attrinfo->rta_type =  IFLA_VLAN_FLAGS;
 		attrinfo->rta_len = RTA_LENGTH(sizeof(flags));
-		ret = memscpy(RTA_DATA(attrinfo), sizeof(req.data), &flags, sizeof(flags));
-		if(ret == RMNETCTL_LIB_COPY_FAILED)
-			return RMNETCTL_LIB_ERR;
+		memcpy(RTA_DATA(attrinfo), &flags, sizeof(flags));
 		req.nl_addr.nlmsg_len = NLMSG_ALIGN(req.nl_addr.nlmsg_len) +
 					RTA_ALIGN(RTA_LENGTH(sizeof(flags)));
 	}
