Message ID | 20181019170019.670-1-dsahern@kernel.org |
---|---|
State | Accepted, archived |
Delegated to: | David Miller |
Headers | show |
Series | [net] net/ipv6: Fix index counter for unicast addresses in in6_dump_addrs | expand |
From: David Ahern <dsahern@kernel.org> Date: Fri, 19 Oct 2018 10:00:19 -0700 > From: David Ahern <dsahern@gmail.com> > > The loop wants to skip previously dumped addresses, so loops until > current index >= saved index. If the message fills it wants to save > the index for the next address to dump - ie., the one that did not > fit in the current message. > > Currently, it is incrementing the index counter before comparing to the > saved index, and then the saved index is off by 1 - it assumes the > current address is going to fit in the message. > > Change the index handling to increment only after a succesful dump. > > Fixes: 502a2ffd7376a ("ipv6: convert idev_list to list macros") > Signed-off-by: David Ahern <dsahern@gmail.com> Applied and queued up for -stable, thanks David.
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c index c63ccce6425f..4e81ff2f4588 100644 --- a/net/ipv6/addrconf.c +++ b/net/ipv6/addrconf.c @@ -4928,8 +4928,8 @@ static int in6_dump_addrs(struct inet6_dev *idev, struct sk_buff *skb, /* unicast address incl. temp addr */ list_for_each_entry(ifa, &idev->addr_list, if_list) { - if (++ip_idx < s_ip_idx) - continue; + if (ip_idx < s_ip_idx) + goto next; err = inet6_fill_ifaddr(skb, ifa, NETLINK_CB(cb->skb).portid, cb->nlh->nlmsg_seq, @@ -4938,6 +4938,8 @@ static int in6_dump_addrs(struct inet6_dev *idev, struct sk_buff *skb, if (err < 0) break; nl_dump_check_consistent(cb, nlmsg_hdr(skb)); +next: + ip_idx++; } break; }