diff --git a/[refs] b/[refs] index 00e571e25f88..7c705f03f18f 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: ded85aa86bff953190cb893fceeecaadcab53a80 +refs/heads/master: aed65501e8c072b52c5b4dc807cd938659329673 diff --git a/trunk/net/ipv6/addrconf.c b/trunk/net/ipv6/addrconf.c index ec7a91d9e865..8ed6763dae96 100644 --- a/trunk/net/ipv6/addrconf.c +++ b/trunk/net/ipv6/addrconf.c @@ -2021,10 +2021,11 @@ void addrconf_prefix_rcv(struct net_device *dev, u8 *opt, int len) ipv6_ifa_notify(0, ift); } - if (create && in6_dev->cnf.use_tempaddr > 0) { + if ((create || list_empty(&in6_dev->tempaddr_list)) && in6_dev->cnf.use_tempaddr > 0) { /* * When a new public address is created as described in [ADDRCONF], - * also create a new temporary address. + * also create a new temporary address. Also create a temporary + * address if it's enabled but no temporary address currently exists. */ read_unlock_bh(&in6_dev->lock); ipv6_create_tempaddr(ifp, NULL);