nl_addr_parse handling of 'default', 'any', and 'all'
I found a small bug in the nl_addr_parse function when being passed the strings "default", "any", or "all". Currently nl_addr_parse will create a zeroed nl_addr with a length corresponding to the family/hint or AF_INET if omitted. This behavior when used in conjunction with the libnl-route library to add default routes to the system has the side effect of creating a route to the host address 0.0.0.0/32. Attached is a patch that matches the iproute2 behavior more closely where we do set the family but the length of the nl_addr is set to 0.
This commit is contained in:
parent
97d2460fab
commit
de28daf226
1 changed files with 3 additions and 4 deletions
|
@ -279,7 +279,9 @@ int nl_addr_parse(const char *addrstr, int hint, struct nl_addr **result)
|
|||
if (!strcasecmp(str, "default") ||
|
||||
!strcasecmp(str, "all") ||
|
||||
!strcasecmp(str, "any")) {
|
||||
|
||||
|
||||
len = 0;
|
||||
|
||||
switch (hint) {
|
||||
case AF_INET:
|
||||
case AF_UNSPEC:
|
||||
|
@ -287,17 +289,14 @@ int nl_addr_parse(const char *addrstr, int hint, struct nl_addr **result)
|
|||
* no hint given the user wants to have a IPv4
|
||||
* address given back. */
|
||||
family = AF_INET;
|
||||
len = 4;
|
||||
goto prefix;
|
||||
|
||||
case AF_INET6:
|
||||
family = AF_INET6;
|
||||
len = 16;
|
||||
goto prefix;
|
||||
|
||||
case AF_LLC:
|
||||
family = AF_LLC;
|
||||
len = 6;
|
||||
goto prefix;
|
||||
|
||||
default:
|
||||
|
|
Loading…
Add table
Reference in a new issue