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.
if (!strcasecmp(str, "default") ||
!strcasecmp(str, "all") ||
!strcasecmp(str, "any")) {
-
+
+ len = 0;
+
switch (hint) {
case AF_INET:
case AF_UNSPEC:
* 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: