Since 9516823051ce, "ip addr show label lo:1" doesn't work anymore (doesn't show any address, despite a matching label). Reverting to return 0 instead of -1 fix the issue.
However, the condition says: "if we filter by label [...] and the label does NOT match the interface name". This makes little sense to compare the label with the interface name. There is also a logic around filter family being provided or not. The match against the label is done by ifa_label_match_rta() in print_addrinfo() and ipaddr_filter(). Just removing the condition makes "ip addr show" works as expected with or without specifying a label, both when the label is matching and not matching. It also works if we specify a label and the label is the interface name. The flush operation also works as expected. Fixes: 9516823051ce ("ipaddress: Improve print_linkinfo()") Signed-off-by: Vincent Bernat <vinc...@bernat.im> --- ip/ipaddress.c | 5 ----- 1 file changed, 5 deletions(-) diff --git a/ip/ipaddress.c b/ip/ipaddress.c index 5009bfe6d2e3..20ef6724944e 100644 --- a/ip/ipaddress.c +++ b/ip/ipaddress.c @@ -837,11 +837,6 @@ int print_linkinfo(const struct sockaddr_nl *who, if (!name) return -1; - if (filter.label && - (!filter.family || filter.family == AF_PACKET) && - fnmatch(filter.label, name, 0)) - return -1; - if (tb[IFLA_GROUP]) { int group = rta_getattr_u32(tb[IFLA_GROUP]); -- 2.18.0