| From 901f0c66a7761d07ce1fb1cefcb3f10b6e7856c1 Mon Sep 17 00:00:00 2001 |
| From: Andreas Henriksson <andreas@fatal.se> |
| Date: Thu, 7 Nov 2013 18:26:38 +0100 |
| Subject: net: Fix "ip rule delete table 256" |
| |
| From: Andreas Henriksson <andreas@fatal.se> |
| |
| [ Upstream commit 13eb2ab2d33c57ebddc57437a7d341995fc9138c ] |
| |
| When trying to delete a table >= 256 using iproute2 the local table |
| will be deleted. |
| The table id is specified as a netlink attribute when it needs more then |
| 8 bits and iproute2 then sets the table field to RT_TABLE_UNSPEC (0). |
| Preconditions to matching the table id in the rule delete code |
| doesn't seem to take the "table id in netlink attribute" into condition |
| so the frh_get_table helper function never gets to do its job when |
| matching against current rule. |
| Use the helper function twice instead of peaking at the table value directly. |
| |
| Originally reported at: http://bugs.debian.org/724783 |
| |
| Reported-by: Nicolas HICHER <nhicher@avencall.com> |
| Signed-off-by: Andreas Henriksson <andreas@fatal.se> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| net/core/fib_rules.c | 3 ++- |
| 1 file changed, 2 insertions(+), 1 deletion(-) |
| |
| --- a/net/core/fib_rules.c |
| +++ b/net/core/fib_rules.c |
| @@ -445,7 +445,8 @@ static int fib_nl_delrule(struct sk_buff |
| if (frh->action && (frh->action != rule->action)) |
| continue; |
| |
| - if (frh->table && (frh_get_table(frh, tb) != rule->table)) |
| + if (frh_get_table(frh, tb) && |
| + (frh_get_table(frh, tb) != rule->table)) |
| continue; |
| |
| if (tb[FRA_PRIORITY] && |