|
@@ -631,15 +631,17 @@ static int dump_rules(struct sk_buff *skb, struct netlink_callback *cb,
|
|
|
{
|
|
|
int idx = 0;
|
|
|
struct fib_rule *rule;
|
|
|
+ int err = 0;
|
|
|
|
|
|
rcu_read_lock();
|
|
|
list_for_each_entry_rcu(rule, &ops->rules_list, list) {
|
|
|
if (idx < cb->args[1])
|
|
|
goto skip;
|
|
|
|
|
|
- if (fib_nl_fill_rule(skb, rule, NETLINK_CB(cb->skb).portid,
|
|
|
- cb->nlh->nlmsg_seq, RTM_NEWRULE,
|
|
|
- NLM_F_MULTI, ops) < 0)
|
|
|
+ err = fib_nl_fill_rule(skb, rule, NETLINK_CB(cb->skb).portid,
|
|
|
+ cb->nlh->nlmsg_seq, RTM_NEWRULE,
|
|
|
+ NLM_F_MULTI, ops);
|
|
|
+ if (err)
|
|
|
break;
|
|
|
skip:
|
|
|
idx++;
|
|
@@ -648,7 +650,7 @@ skip:
|
|
|
cb->args[1] = idx;
|
|
|
rules_ops_put(ops);
|
|
|
|
|
|
- return skb->len;
|
|
|
+ return err;
|
|
|
}
|
|
|
|
|
|
static int fib_nl_dumprule(struct sk_buff *skb, struct netlink_callback *cb)
|
|
@@ -664,7 +666,9 @@ static int fib_nl_dumprule(struct sk_buff *skb, struct netlink_callback *cb)
|
|
|
if (ops == NULL)
|
|
|
return -EAFNOSUPPORT;
|
|
|
|
|
|
- return dump_rules(skb, cb, ops);
|
|
|
+ dump_rules(skb, cb, ops);
|
|
|
+
|
|
|
+ return skb->len;
|
|
|
}
|
|
|
|
|
|
rcu_read_lock();
|