aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>2007-02-28 09:13:20 -0500
committerDavid S. Miller <davem@sunset.davemloft.net>2007-04-26 01:23:44 -0400
commitca043569390c528de4cd5ec9e07502f2bf4ecd1f (patch)
tree939512ab133de1d85350e8ce5365f9daf4b2b63b
parent95c385b4d5a71b8ad552aecaa968ea46d7da2f6a (diff)
[IPV6] ADDRCONF: Fix possible inet6_ifaddr leakage with CONFIG_OPTIMISTIC_DAD.
The inet6_ifaddr for source address of RS is leaked if the address is not an optimistic address. Signed-off-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--net/ipv6/ndisc.c7
1 files changed, 3 insertions, 4 deletions
diff --git a/net/ipv6/ndisc.c b/net/ipv6/ndisc.c
index b79b00042310..053147a0027e 100644
--- a/net/ipv6/ndisc.c
+++ b/net/ipv6/ndisc.c
@@ -627,7 +627,6 @@ void ndisc_send_rs(struct net_device *dev, struct in6_addr *saddr,
627 struct sk_buff *skb; 627 struct sk_buff *skb;
628 struct icmp6hdr *hdr; 628 struct icmp6hdr *hdr;
629 __u8 * opt; 629 __u8 * opt;
630 struct inet6_ifaddr *ifp;
631 int send_sllao = dev->addr_len; 630 int send_sllao = dev->addr_len;
632 int len; 631 int len;
633 int err; 632 int err;
@@ -643,12 +642,12 @@ void ndisc_send_rs(struct net_device *dev, struct in6_addr *saddr,
643 * supress the inclusion of the sllao. 642 * supress the inclusion of the sllao.
644 */ 643 */
645 if (send_sllao) { 644 if (send_sllao) {
646 ifp = ipv6_get_ifaddr(saddr, dev, 1); 645 struct inet6_ifaddr *ifp = ipv6_get_ifaddr(saddr, dev, 1);
647 if (ifp) { 646 if (ifp) {
648 if (ifp->flags & IFA_F_OPTIMISTIC) { 647 if (ifp->flags & IFA_F_OPTIMISTIC) {
649 send_sllao=0; 648 send_sllao = 0;
650 in6_ifa_put(ifp);
651 } 649 }
650 in6_ifa_put(ifp);
652 } else { 651 } else {
653 send_sllao = 0; 652 send_sllao = 0;
654 } 653 }