• Ido Schimmel's avatar
    ipv4: Fix address dump when IPv4 is disabled on an interface · 7b05ab85
    Ido Schimmel authored
    Cited commit started returning an error when user space requests to dump
    the interface's IPv4 addresses and IPv4 is disabled on the interface.
    Restore the previous behavior and do not return an error.
    
    Before cited commit:
    
     # ip address show dev dummy1
     10: dummy1: <BROADCAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
         link/ether e2:40:68:98:d0:18 brd ff:ff:ff:ff:ff:ff
         inet6 fe80::e040:68ff:fe98:d018/64 scope link proto kernel_ll
            valid_lft forever preferred_lft forever
     # ip link set dev dummy1 mtu 67
     # ip address show dev dummy1
     10: dummy1: <BROADCAST,NOARP,UP,LOWER_UP> mtu 67 qdisc noqueue state UNKNOWN group default qlen 1000
         link/ether e2:40:68:98:d0:18 brd ff:ff:ff:ff:ff:ff
    
    After cited commit:
    
     # ip address show dev dummy1
     10: dummy1: <BROADCAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
         link/ether 32:2d:69:f2:9c:99 brd ff:ff:ff:ff:ff:ff
         inet6 fe80::302d:69ff:fef2:9c99/64 scope link proto kernel_ll
            valid_lft forever preferred_lft forever
     # ip link set dev dummy1 mtu 67
     # ip address show dev dummy1
     RTNETLINK answers: No such device
     Dump terminated
    
    With this patch:
    
     # ip address show dev dummy1
     10: dummy1: <BROADCAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
         link/ether de:17:56:bb:57:c0 brd ff:ff:ff:ff:ff:ff
         inet6 fe80::dc17:56ff:febb:57c0/64 scope link proto kernel_ll
            valid_lft forever preferred_lft forever
     # ip link set dev dummy1 mtu 67
     # ip address show dev dummy1
     10: dummy1: <BROADCAST,NOARP,UP,LOWER_UP> mtu 67 qdisc noqueue state UNKNOWN group default qlen 1000
         link/ether de:17:56:bb:57:c0 brd ff:ff:ff:ff:ff:ff
    
    I fixed the exact same issue for IPv6 in commit c04f7dfe ("ipv6: Fix
    address dump when IPv6 is disabled on an interface"), but noted [1] that
    I am not doing the change for IPv4 because I am not aware of a way to
    disable IPv4 on an interface other than unregistering it. I clearly
    missed the above case.
    
    [1] https://lore.kernel.org/netdev/20240321173042.2151756-1-idosch@nvidia.com/
    
    Fixes: cdb2f80f ("inet: use xa_array iterator to implement inet_dump_ifaddr()")
    Reported-by: default avatarCarolina Jubran <cjubran@nvidia.com>
    Reported-by: default avatarYamen Safadi <ysafadi@nvidia.com>
    Tested-by: default avatarCarolina Jubran <cjubran@nvidia.com>
    Reviewed-by: default avatarPetr Machata <petrm@nvidia.com>
    Signed-off-by: default avatarIdo Schimmel <idosch@nvidia.com>
    Reviewed-by: default avatarEric Dumazet <edumazet@google.com>
    Reviewed-by: default avatarDavid Ahern <dsahern@kernel.org>
    Link: https://lore.kernel.org/r/20240523110257.334315-1-idosch@nvidia.comSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
    7b05ab85
devinet.c 69.9 KB