net: fix netlink address dumping in IPv4/IPv6
When a dump is interrupted at the last device in a hash chain and then continued, "idx" won't get incremented past s_idx, so s_ip_idx is not reset when moving on to the next device. This means of all following devices only the last n - s_ip_idx addresses are dumped. Tested-by: Pawel Staszewski <pstaszewski@itcare.pl> Signed-off-by: Patrick McHardy <kaber@trash.net>
This commit is contained in:
parent
ac90a14936
commit
4b97efdf39
|
@ -1194,7 +1194,7 @@ static int inet_dump_ifaddr(struct sk_buff *skb, struct netlink_callback *cb)
|
|||
hlist_for_each_entry_rcu(dev, node, head, index_hlist) {
|
||||
if (idx < s_idx)
|
||||
goto cont;
|
||||
if (idx > s_idx)
|
||||
if (h > s_h || idx > s_idx)
|
||||
s_ip_idx = 0;
|
||||
in_dev = __in_dev_get_rcu(dev);
|
||||
if (!in_dev)
|
||||
|
|
|
@ -3610,7 +3610,7 @@ static int inet6_dump_addr(struct sk_buff *skb, struct netlink_callback *cb,
|
|||
hlist_for_each_entry_rcu(dev, node, head, index_hlist) {
|
||||
if (idx < s_idx)
|
||||
goto cont;
|
||||
if (idx > s_idx)
|
||||
if (h > s_h || idx > s_idx)
|
||||
s_ip_idx = 0;
|
||||
ip_idx = 0;
|
||||
if ((idev = __in6_dev_get(dev)) == NULL)
|
||||
|
|
Loading…
Reference in New Issue