[PATCH] make function rtnl_link_set_name() more reasonable

Hongwei Bi hwbi2008 at gmail.com
Mon Jan 13 00:19:14 EST 2014


Thanks for your review. If my patch looks OK,the callers who use
function rtnl_link_set_name() should also be changed,such as in
"/lib/route/link/bonding.c:85", "/lib/route/link/veth.c:259" and test
cases in tests directory. Then I will make a new patch to fix these.

Best Regards,
Hongwei


2014/1/7 Thomas Graf <tgraf at suug.ch>:
> On 01/02/14 at 12:28am, Hongwei Bi wrote:
>> 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 *);
>
> Usually this would break ABI but changing void to int seems to be OK
> from an ABI and API stability perspective.
>
>>  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;
>
> ACK



More information about the libnl mailing list