aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFlorian Westphal <fw@strlen.de>2010-05-07 11:31:33 +0000
committerDavid S. Miller <davem@davemloft.net>2010-05-17 17:08:08 -0700
commit0771275b25e84f568699a5d209c5e339ef83fa94 (patch)
tree4cd6a8f4c399d3e639e810aac87242060a860a24
parent6811d58fc148c393f80a9f5a9db49d7e75cdc546 (diff)
downloadkernel_samsung_smdk4412-0771275b25e84f568699a5d209c5e339ef83fa94.zip
kernel_samsung_smdk4412-0771275b25e84f568699a5d209c5e339ef83fa94.tar.gz
kernel_samsung_smdk4412-0771275b25e84f568699a5d209c5e339ef83fa94.tar.bz2
ipv6 addrlabel: permit deletion of labels assigned to removed dev
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>
-rw-r--r--net/ipv6/addrlabel.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/net/ipv6/addrlabel.c b/net/ipv6/addrlabel.c
index ae404c9..8c4348c 100644
--- a/net/ipv6/addrlabel.c
+++ b/net/ipv6/addrlabel.c
@@ -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);