[PATCH] make function rtnl_link_set_name() more reasonable

Hongwei Bi hwbi2008 at gmail.com
Wed Jan 1 11:28:20 EST 2014


We set the maximum value of IFNAMSIZ is 16 bytes.So when
the size of the new link's name is longer then 16,we should
at least notify the user that the name's size is invalid
instead of cutting off the extra parts simply.

Signed-off-by: Hongwei Bi <hwbi2008 at gmail.com>
---
 include/netlink/route/link.h | 2 +-
 lib/route/link.c             | 6 +++++-
 2 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/include/netlink/route/link.h b/include/netlink/route/link.h
index 29a5df9..472e057 100644
--- a/include/netlink/route/link.h
+++ b/include/netlink/route/link.h
@@ -151,7 +151,7 @@ extern int	rtnl_link_str2carrier(const char *);
 extern void	rtnl_link_set_qdisc(struct rtnl_link *, const char *);
 extern char *	rtnl_link_get_qdisc(struct rtnl_link *);
 
-extern void	rtnl_link_set_name(struct rtnl_link *, const char *);
+extern int	rtnl_link_set_name(struct rtnl_link *, const char *);
 extern char *	rtnl_link_get_name(struct rtnl_link *);
 
 extern void	rtnl_link_set_group(struct rtnl_link *, uint32_t);
diff --git a/lib/route/link.c b/lib/route/link.c
index 4bcf615..0bb7c55 100644
--- a/lib/route/link.c
+++ b/lib/route/link.c
@@ -1652,10 +1652,14 @@ void rtnl_link_put(struct rtnl_link *link)
  * @see rtnl_link_get_name()
  * @see rtnl_link_set_ifindex()
  */
-void rtnl_link_set_name(struct rtnl_link *link, const char *name)
+int rtnl_link_set_name(struct rtnl_link *link, const char *name)
 {
+	if(strlen(name) > IFNAMSIZ)
+		return -NLE_INVAL;
+
 	strncpy(link->l_name, name, sizeof(link->l_name) - 1);
 	link->ce_mask |= LINK_ATTR_IFNAME;
+	return 0; 
 }
 
 /**
-- 
1.8.1.2




More information about the libnl mailing list