Message ID | 20130623195648.GC13836@order.stressinduktion.org |
---|---|
State | Superseded, archived |
Delegated to: | David Miller |
Headers | show |
On Sun, Jun 23, 2013 at 09:56:48PM +0200, Hannes Frederic Sowa wrote: > We should check the return value of ipv6_get_lladdr in inet6_set_iftoken. > > A possible situation, which could leave ll_addr unassigned is, when > the user removed her link-local address but a global scoped address was > already set. In this case the interface would still be IF_READY and not > dead. In that case the RS source address is some value from the stack. > > Cc: Daniel Borkmann <dborkman@redhat.com> > Signed-off-by: Hannes Frederic Sowa <hannes@stressinduktion.org> > --- > Maybe -net, or even stable? Actually, stable is nonsense because tokenized ipv6 addresses first appeared in v3.10-rc1 in mainline. Greetings, Hannes -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On 06/23/2013 09:56 PM, Hannes Frederic Sowa wrote: > We should check the return value of ipv6_get_lladdr in inet6_set_iftoken. > > A possible situation, which could leave ll_addr unassigned is, when > the user removed her link-local address but a global scoped address was > already set. In this case the interface would still be IF_READY and not > dead. In that case the RS source address is some value from the stack. > > Cc: Daniel Borkmann <dborkman@redhat.com> > Signed-off-by: Hannes Frederic Sowa <hannes@stressinduktion.org> Acked-by: Daniel Borkmann <dborkman@redhat.com> -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Sun, Jun 23, 2013 at 09:56:48PM +0200, Hannes Frederic Sowa wrote: > We should check the return value of ipv6_get_lladdr in inet6_set_iftoken. > > A possible situation, which could leave ll_addr unassigned is, when > the user removed her link-local address but a global scoped address was > already set. In this case the interface would still be IF_READY and not > dead. In that case the RS source address is some value from the stack. > > Cc: Daniel Borkmann <dborkman@redhat.com> > Signed-off-by: Hannes Frederic Sowa <hannes@stressinduktion.org> > --- Reviewed-by: Flavio Leitner <fbl@redhat.com> -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c index 8044912..9392c6e 100644 --- a/net/ipv6/addrconf.c +++ b/net/ipv6/addrconf.c @@ -4317,6 +4317,7 @@ static int inet6_set_iftoken(struct inet6_dev *idev, struct in6_addr *token) struct inet6_ifaddr *ifp; struct net_device *dev = idev->dev; bool update_rs = false; + struct in6_addr ll_addr; if (token == NULL) return -EINVAL; @@ -4336,11 +4337,9 @@ static int inet6_set_iftoken(struct inet6_dev *idev, struct in6_addr *token) write_unlock_bh(&idev->lock); - if (!idev->dead && (idev->if_flags & IF_READY)) { - struct in6_addr ll_addr; - - ipv6_get_lladdr(dev, &ll_addr, IFA_F_TENTATIVE | - IFA_F_OPTIMISTIC); + if (!idev->dead && (idev->if_flags & IF_READY) && + !ipv6_get_lladdr(dev, &ll_addr, IFA_F_TENTATIVE | + IFA_F_OPTIMISTIC)) { /* If we're not ready, then normal ifup will take care * of this. Otherwise, we need to request our rs here.
We should check the return value of ipv6_get_lladdr in inet6_set_iftoken. A possible situation, which could leave ll_addr unassigned is, when the user removed her link-local address but a global scoped address was already set. In this case the interface would still be IF_READY and not dead. In that case the RS source address is some value from the stack. Cc: Daniel Borkmann <dborkman@redhat.com> Signed-off-by: Hannes Frederic Sowa <hannes@stressinduktion.org> --- Maybe -net, or even stable? net/ipv6/addrconf.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-)