• B
    IPv6: preferred lifetime of address not getting updated · a1ed0526
    Brian Haley 提交于
    There's a bug in addrconf_prefix_rcv() where it won't update the
    preferred lifetime of an IPv6 address if the current valid lifetime
    of the address is less than 2 hours (the minimum value in the RA).
    
    For example, If I send a router advertisement with a prefix that
    has valid lifetime = preferred lifetime = 2 hours we'll build
    this address:
    
    3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000
        inet6 2001:1890:1109:a20:217:8ff:fe7d:4718/64 scope global dynamic
           valid_lft 7175sec preferred_lft 7175sec
    
    If I then send the same prefix with valid lifetime = preferred
    lifetime = 0 it will be ignored since the minimum valid lifetime
    is 2 hours:
    
    3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000
        inet6 2001:1890:1109:a20:217:8ff:fe7d:4718/64 scope global dynamic
           valid_lft 7161sec preferred_lft 7161sec
    
    But according to RFC 4862 we should always reset the preferred lifetime
    even if the valid lifetime is invalid, which would cause the address
    to immediately get deprecated.  So with this patch we'd see this:
    
    5: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000
        inet6 2001:1890:1109:a20:21f:29ff:fe5a:ef04/64 scope global deprecated dynamic
           valid_lft 7163sec preferred_lft 0sec
    
    The comment winds-up being 5x the size of the code to fix the problem.
    
    Update the preferred lifetime of IPv6 addresses derived from a prefix
    info option in a router advertisement even if the valid lifetime in
    the option is invalid, as specified in RFC 4862 Section 5.5.3e.  Fixes
    an issue where an address will not immediately become deprecated.
    Reported by Jens Rosenboom.
    Signed-off-by: NBrian Haley <brian.haley@hp.com>
    Signed-off-by: NDavid S. Miller <davem@davemloft.net>
    a1ed0526
addrconf.c 110.6 KB