Commit ca043569 authored by YOSHIFUJI Hideaki's avatar YOSHIFUJI Hideaki Committed by David S. Miller

[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: default avatarYOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 95c385b4
...@@ -627,7 +627,6 @@ void ndisc_send_rs(struct net_device *dev, struct in6_addr *saddr, ...@@ -627,7 +627,6 @@ void ndisc_send_rs(struct net_device *dev, struct in6_addr *saddr,
struct sk_buff *skb; struct sk_buff *skb;
struct icmp6hdr *hdr; struct icmp6hdr *hdr;
__u8 * opt; __u8 * opt;
struct inet6_ifaddr *ifp;
int send_sllao = dev->addr_len; int send_sllao = dev->addr_len;
int len; int len;
int err; int err;
...@@ -643,12 +642,12 @@ void ndisc_send_rs(struct net_device *dev, struct in6_addr *saddr, ...@@ -643,12 +642,12 @@ void ndisc_send_rs(struct net_device *dev, struct in6_addr *saddr,
* supress the inclusion of the sllao. * supress the inclusion of the sllao.
*/ */
if (send_sllao) { if (send_sllao) {
ifp = ipv6_get_ifaddr(saddr, dev, 1); struct inet6_ifaddr *ifp = ipv6_get_ifaddr(saddr, dev, 1);
if (ifp) { if (ifp) {
if (ifp->flags & IFA_F_OPTIMISTIC) { if (ifp->flags & IFA_F_OPTIMISTIC) {
send_sllao=0; send_sllao = 0;
in6_ifa_put(ifp);
} }
in6_ifa_put(ifp);
} else { } else {
send_sllao = 0; send_sllao = 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment