aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Dumazet <eric.dumazet@gmail.com>2009-11-09 02:40:17 -0500
committerDavid S. Miller <davem@davemloft.net>2009-11-10 23:54:42 -0500
commitbcd323262a94b14b84341982b90443a76a477861 (patch)
tree9e7b7bb19cbb19f93ae052af328706f5228123e5
parent84d2697d9649339215675551eae28ba04068dea1 (diff)
ipv6: Allow inet6_dump_addr() to handle more than 64 addresses
Apparently, inet6_dump_addr() is not able to handle more than 64 ipv6 addresses per device. We must break from inner loops in case skb is full, or else cursor is put at the end of list. Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--net/ipv6/addrconf.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
index f9f7fd6ee1f3..0ab39fedd2dc 100644
--- a/net/ipv6/addrconf.c
+++ b/net/ipv6/addrconf.c
@@ -3519,6 +3519,8 @@ static int inet6_dump_addr(struct sk_buff *skb, struct netlink_callback *cb,
3519 cb->nlh->nlmsg_seq, 3519 cb->nlh->nlmsg_seq,
3520 RTM_NEWADDR, 3520 RTM_NEWADDR,
3521 NLM_F_MULTI); 3521 NLM_F_MULTI);
3522 if (err <= 0)
3523 break;
3522 } 3524 }
3523 break; 3525 break;
3524 case MULTICAST_ADDR: 3526 case MULTICAST_ADDR:
@@ -3532,6 +3534,8 @@ static int inet6_dump_addr(struct sk_buff *skb, struct netlink_callback *cb,
3532 cb->nlh->nlmsg_seq, 3534 cb->nlh->nlmsg_seq,
3533 RTM_GETMULTICAST, 3535 RTM_GETMULTICAST,
3534 NLM_F_MULTI); 3536 NLM_F_MULTI);
3537 if (err <= 0)
3538 break;
3535 } 3539 }
3536 break; 3540 break;
3537 case ANYCAST_ADDR: 3541 case ANYCAST_ADDR:
@@ -3545,6 +3549,8 @@ static int inet6_dump_addr(struct sk_buff *skb, struct netlink_callback *cb,
3545 cb->nlh->nlmsg_seq, 3549 cb->nlh->nlmsg_seq,
3546 RTM_GETANYCAST, 3550 RTM_GETANYCAST,
3547 NLM_F_MULTI); 3551 NLM_F_MULTI);
3552 if (err <= 0)
3553 break;
3548 } 3554 }
3549 break; 3555 break;
3550 default: 3556 default: