From: Thomas Graf Date: Thu, 14 Mar 2013 17:57:15 +0000 (+0100) Subject: rtnl-addr: Fix invalid call to nl_addr_set_prefixlen() if neither local or peer addre... X-Git-Tag: libnl3_2_22rc1~23 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b39c9f7a53bdaecda444675bbacf25df4c7292a6;p=libnl rtnl-addr: Fix invalid call to nl_addr_set_prefixlen() if neither local or peer address are present Signed-off-by: Thomas Graf --- diff --git a/lib/route/addr.c b/lib/route/addr.c index e62c964..71fca94 100644 --- a/lib/route/addr.c +++ b/lib/route/addr.c @@ -199,8 +199,9 @@ static int addr_msg_parser(struct nl_cache_ops *ops, struct sockaddr_nl *who, struct rtnl_addr *addr; struct ifaddrmsg *ifa; struct nlattr *tb[IFA_MAX+1]; - int err, peer_prefix = 0, family; + int err, family; struct nl_cache *link_cache; + struct nl_addr *plen_addr = NULL; addr = rtnl_addr_alloc(); if (!addr) @@ -244,6 +245,7 @@ static int addr_msg_parser(struct nl_cache_ops *ops, struct sockaddr_nl *who, if (!addr->a_local) goto errout_nomem; addr->ce_mask |= ADDR_ATTR_LOCAL; + plen_addr = addr->a_local; } if (tb[IFA_ADDRESS]) { @@ -263,12 +265,13 @@ static int addr_msg_parser(struct nl_cache_ops *ops, struct sockaddr_nl *who, } else { addr->a_peer = a; addr->ce_mask |= ADDR_ATTR_PEER; - peer_prefix = 1; } + + plen_addr = a; } - nl_addr_set_prefixlen(peer_prefix ? addr->a_peer : addr->a_local, - addr->a_prefixlen); + if (plen_addr) + nl_addr_set_prefixlen(plen_addr, addr->a_prefixlen); /* IPv4 only */ if (tb[IFA_BROADCAST]) {