[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>
This commit is contained in:
parent
95c385b4d5
commit
ca04356939
@ -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,
|
|||||||
* 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;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user