From 0cf780859cbce363a6e2cd4b8d19c5498a3530f5 Mon Sep 17 00:00:00 2001 From: Thomas Graf Date: Wed, 14 May 2008 23:08:06 +0200 Subject: [PATCH] Check length of provided address label --- include/netlink/route/addr.h | 2 +- lib/route/addr.c | 9 +++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/include/netlink/route/addr.h b/include/netlink/route/addr.h index 9004ca0..a239072 100644 --- a/include/netlink/route/addr.h +++ b/include/netlink/route/addr.h @@ -42,7 +42,7 @@ extern int rtnl_addr_delete(struct nl_handle *, extern char * rtnl_addr_flags2str(int, char *, size_t); extern int rtnl_addr_str2flags(const char *); -extern void rtnl_addr_set_label(struct rtnl_addr *, const char *); +extern int rtnl_addr_set_label(struct rtnl_addr *, const char *); extern char * rtnl_addr_get_label(struct rtnl_addr *); extern void rtnl_addr_set_ifindex(struct rtnl_addr *, int); diff --git a/lib/route/addr.c b/lib/route/addr.c index 905dce2..1edcd69 100644 --- a/lib/route/addr.c +++ b/lib/route/addr.c @@ -850,10 +850,15 @@ int rtnl_addr_delete(struct nl_handle *handle, struct rtnl_addr *addr, * @{ */ -void rtnl_addr_set_label(struct rtnl_addr *addr, const char *label) +int rtnl_addr_set_label(struct rtnl_addr *addr, const char *label) { - strncpy(addr->a_label, label, sizeof(addr->a_label) - 1); + if (strlen(label) > sizeof(addr->a_label) - 1) + return -NLE_RANGE; + + strcpy(addr->a_label, label); addr->ce_mask |= ADDR_ATTR_LABEL; + + return 0; } char *rtnl_addr_get_label(struct rtnl_addr *addr)