Patchwork [1/1] ipv6 addrlabel: permit deletion of labels assigned to removed dev

login
register
mail settings
Submitter Florian Westphal
Date May 7, 2010, 9:31 p.m.
Message ID <1273267893-22485-1-git-send-email-fw@strlen.de>
Download mbox | patch
Permalink /patch/51959/
State Accepted
Delegated to: David Miller
Headers show

Comments

Florian Westphal - May 7, 2010, 9:31 p.m.
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>
---
 net/ipv6/addrlabel.c |    8 ++++----
 1 files changed, 4 insertions(+), 4 deletions(-)
David Miller - May 18, 2010, 12:08 a.m.
From: Florian Westphal <fw@strlen.de>
Date: Fri,  7 May 2010 23:31:33 +0200

> 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>

Applied, thanks Florian.
--
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

Patch

diff --git a/net/ipv6/addrlabel.c b/net/ipv6/addrlabel.c
index 6ff73c4..8342296 100644
--- a/net/ipv6/addrlabel.c
+++ b/net/ipv6/addrlabel.c
@@ -421,10 +421,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;
 
@@ -440,6 +436,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);