diff options
author | YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org> | 2007-02-28 09:13:20 -0500 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2007-04-26 01:23:44 -0400 |
commit | ca043569390c528de4cd5ec9e07502f2bf4ecd1f (patch) | |
tree | 939512ab133de1d85350e8ce5365f9daf4b2b63b | |
parent | 95c385b4d5a71b8ad552aecaa968ea46d7da2f6a (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.c | 7 |
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 | } |