diff -up NetworkManager-0.9.8.8/src/nm-ip4-config.c.foo NetworkManager-0.9.8.8/src/nm-ip4-config.c --- NetworkManager-0.9.8.8/src/nm-ip4-config.c.foo 2014-04-24 11:52:05.231703924 -0500 +++ NetworkManager-0.9.8.8/src/nm-ip4-config.c 2014-04-24 11:53:49.253403474 -0500 @@ -636,8 +636,16 @@ nm_ip4_config_to_rtnl_addr (NMIP4Config if (flags & NM_RTNL_ADDR_PTP_ADDR) success = (ip4_addr_to_rtnl_peer (priv->ptp_address, addr) >= 0); - if (flags & NM_RTNL_ADDR_PREFIX) - rtnl_addr_set_prefixlen (addr, nm_ip4_address_get_prefix (config_addr)); + if (flags & NM_RTNL_ADDR_PREFIX) { + struct nl_addr *nladdr; + guint plen = nm_ip4_address_get_prefix (config_addr); + + rtnl_addr_set_prefixlen (addr, plen); + /* rtnl_addr_set_prefixlen fails to update the nl_addr prefixlen */ + nladdr = rtnl_addr_get_local (addr); + if (nladdr) + nl_addr_set_prefixlen (nladdr, plen); + } if (flags & NM_RTNL_ADDR_BROADCAST) { guint32 hostmask, network, bcast, netmask;