]> git.karo-electronics.de Git - mv-sheeva.git/commitdiff
ipv6 addrlabel: permit deletion of labels assigned to removed dev
authorFlorian Westphal <fw@strlen.de>
Fri, 7 May 2010 11:31:33 +0000 (11:31 +0000)
committerDavid S. Miller <davem@davemloft.net>
Tue, 18 May 2010 00:08:08 +0000 (17:08 -0700)
as addrlabels with an interface index are left alone when the
interface gets removed this results in addrlabels that can no
longer be removed.

Restrict validation of index to adding new addrlabels.

Signed-off-by: Florian Westphal <fw@strlen.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv6/addrlabel.c

index ae404c9a746c3fe088144b16aca92b84108a5b37..8c4348cb19505446e13471d09369610e41851146 100644 (file)
@@ -422,10 +422,6 @@ static int ip6addrlbl_newdel(struct sk_buff *skb, struct nlmsghdr *nlh,
            ifal->ifal_prefixlen > 128)
                return -EINVAL;
 
-       if (ifal->ifal_index &&
-           !__dev_get_by_index(net, ifal->ifal_index))
-               return -EINVAL;
-
        if (!tb[IFAL_ADDRESS])
                return -EINVAL;
 
@@ -441,6 +437,10 @@ static int ip6addrlbl_newdel(struct sk_buff *skb, struct nlmsghdr *nlh,
 
        switch(nlh->nlmsg_type) {
        case RTM_NEWADDRLABEL:
+               if (ifal->ifal_index &&
+                   !__dev_get_by_index(net, ifal->ifal_index))
+                       return -EINVAL;
+
                err = ip6addrlbl_add(net, pfx, ifal->ifal_prefixlen,
                                     ifal->ifal_index, label,
                                     nlh->nlmsg_flags & NLM_F_REPLACE);