On Sat, Jun 23, 2018 at 8:59 AM, Jason A. Donenfeld <ja...@zx2c4.com> wrote: > Two rules with different values of suppress_prefix or suppress_ifgroup > are not the same. This fixes an -EEXIST when running: > > $ ip -4 rule add table main suppress_prefixlength 0 > > Signed-off-by: Jason A. Donenfeld <ja...@zx2c4.com> > Fixes: f9d4b0c1e969 ("fib_rules: move common handling of newrule delrule msgs > into fib_nl2rule") > --- > net/core/fib_rules.c | 6 ++++++ > 1 file changed, 6 insertions(+) > > diff --git a/net/core/fib_rules.c b/net/core/fib_rules.c > index 126ffc5bc630..665799311b98 100644 > --- a/net/core/fib_rules.c > +++ b/net/core/fib_rules.c > @@ -416,6 +416,12 @@ static struct fib_rule *rule_find(struct fib_rules_ops > *ops, > if (rule->mark && r->mark != rule->mark) > continue; > > + if (r->suppress_ifgroup != rule->suppress_ifgroup) > + continue; > + > + if (r->suppress_prefixlen != rule->suppress_prefixlen) > + continue; > + > if (rule->mark_mask && r->mark_mask != rule->mark_mask) > continue; >
Can you please change the check to compare only if the new rule has the attributes set ? eg: if (rule->suppress_ifgroup != -1 && (r->suppress_ifgroup != rule->suppress_ifgroup)) same thing for suppress_prefixlen