浏览代码

[IPV6]: Fix routing by fwmark

Fix mark comparison, also dump the mask to userspace when the mask is
zero, but the mark is not (in which case the mark is dumped, so the
mask is needed to make sense of it).

Signed-off-by: Patrick McHardy <kaber@trash.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
Patrick McHardy 18 年之前
父节点
当前提交
366e4adc0f
共有 1 个文件被更改,包括 2 次插入2 次删除
  1. 2 2
      net/ipv6/fib6_rules.c

+ 2 - 2
net/ipv6/fib6_rules.c

@@ -129,7 +129,7 @@ static int fib6_rule_match(struct fib_rule *rule, struct flowi *fl, int flags)
 		return 0;
 		return 0;
 
 
 #ifdef CONFIG_IPV6_ROUTE_FWMARK
 #ifdef CONFIG_IPV6_ROUTE_FWMARK
-	if ((r->fwmark ^ fl->fl6_fwmark) / r->fwmask)
+	if ((r->fwmark ^ fl->fl6_fwmark) & r->fwmask)
 		return 0;
 		return 0;
 #endif
 #endif
 
 
@@ -256,7 +256,7 @@ static int fib6_rule_fill(struct fib_rule *rule, struct sk_buff *skb,
 	if (rule6->fwmark)
 	if (rule6->fwmark)
 		NLA_PUT_U32(skb, FRA_FWMARK, rule6->fwmark);
 		NLA_PUT_U32(skb, FRA_FWMARK, rule6->fwmark);
 
 
-	if (rule6->fwmask)
+	if (rule6->fwmask || rule6->fwmark)
 		NLA_PUT_U32(skb, FRA_FWMASK, rule6->fwmask);
 		NLA_PUT_U32(skb, FRA_FWMASK, rule6->fwmask);
 #endif
 #endif