From: Zhang Shengju Date: Fri, 18 Nov 2016 01:12:53 +0000 (+0800) Subject: iproute2: fix the link group name getting error X-Git-Tag: v4.9.0~25 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2d98dd482149aa1a2bf509122af089249644a89f;p=thirdparty%2Fiproute2.git iproute2: fix the link group name getting error In the situation where more than one entry live in the same hash bucket, loop to get the correct one. Before: $ cat /etc/iproute2/group 0 default 256 test $ sudo ip link set group test dummy1 $ ip link show type dummy 11: dummy0: mtu 1500 qdisc noop state DOWN mode DEFAULT group 0 qlen 1000 link/ether 4e:3b:d3:6c:f0:e6 brd ff:ff:ff:ff:ff:ff 12: dummy1: mtu 1500 qdisc noop state DOWN mode DEFAULT group test qlen 1000 link/ether d6:9c:a4:1f:e7:e5 brd ff:ff:ff:ff:ff:ff After: $ ip link show type dummy 11: dummy0: mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000 link/ether 4e:3b:d3:6c:f0:e6 brd ff:ff:ff:ff:ff:ff 12: dummy1: mtu 1500 qdisc noop state DOWN mode DEFAULT group test qlen 1000 link/ether d6:9c:a4:1f:e7:e5 brd ff:ff:ff:ff:ff:ff Signed-off-by: Zhang Shengju --- diff --git a/lib/rt_names.c b/lib/rt_names.c index b665d3e92..c66cb1e43 100644 --- a/lib/rt_names.c +++ b/lib/rt_names.c @@ -559,8 +559,12 @@ const char *rtnl_group_n2a(int id, char *buf, int len) for (i = 0; i < 256; i++) { entry = rtnl_group_hash[i]; - if (entry && entry->id == id) - return entry->name; + + while (entry) { + if (entry->id == id) + return entry->name; + entry = entry->next; + } } snprintf(buf, len, "%d", id);