• Robert Shearman's avatar
    mpls: don't dump RTA_VIA attribute if not specified · 72dcac96
    Robert Shearman authored
    The problem seen is that when adding a route with a nexthop with no
    via address specified, iproute2 generates bogus output:
    
      # ip -f mpls route add 100 dev lo
      # ip -f mpls route list
      100 via inet 0.0.8.0 dev lo
    
    The reason for this is that the kernel generates an RTA_VIA attribute
    with the family set to AF_INET, but the via address data having zero
    length. The cause of family being AF_INET is that on route insert
    cfg->rc_via_table is left set to 0, which just happens to be
    NEIGH_ARP_TABLE which is then translated into AF_INET.
    
    iproute2 doesn't validate the length prior to printing and so prints
    garbage. Although it could be fixed to do the validation, I would
    argue that AF_INET addresses should always be exactly 4 bytes so the
    kernel is really giving userspace bogus data.
    
    Therefore, avoid generating the RTA_VIA attribute when dumping the
    route if the via address wasn't specified on add/modify. This is
    indicated by NEIGH_ARP_TABLE and a zero via address length - if the
    user specified a via address the address length would have been
    validated such that it was 4 bytes. Although this is a change in
    behaviour that is visible to userspace, I believe that what was
    generated before was invalid and as such userspace wouldn't be
    expecting it.
    Signed-off-by: default avatarRobert Shearman <rshearma@brocade.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    72dcac96
af_mpls.c 35.9 KB