| From roland@kernel.org Sat Oct 17 17:11:23 2015 |
| From: Roland Dreier <roland@kernel.org> |
| Date: Mon, 5 Oct 2015 10:29:28 -0700 |
| Subject: fib_rules: Fix dump_rules() not to exit early |
| To: netdev@vger.kernel.org, stable@vger.kernel.org |
| Cc: Roland Dreier <roland@purestorage.com> |
| Message-ID: <1444066168-5566-1-git-send-email-roland@kernel.org> |
| |
| |
| From: Roland Dreier <roland@purestorage.com> |
| |
| Backports of 41fc014332d9 ("fib_rules: fix fib rule dumps across |
| multiple skbs") introduced a regression in "ip rule show" - it ends up |
| dumping the first rule over and over and never exiting, because 3.19 |
| and earlier are missing commit 053c095a82cf ("netlink: make |
| nlmsg_end() and genlmsg_end() void"), so fib_nl_fill_rule() ends up |
| returning skb->len (i.e. > 0) in the success case. |
| |
| Fix this by checking the return code for < 0 instead of != 0. |
| |
| Signed-off-by: Roland Dreier <roland@purestorage.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| net/core/fib_rules.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/net/core/fib_rules.c |
| +++ b/net/core/fib_rules.c |
| @@ -631,7 +631,7 @@ static int dump_rules(struct sk_buff *sk |
| err = fib_nl_fill_rule(skb, rule, NETLINK_CB(cb->skb).portid, |
| cb->nlh->nlmsg_seq, RTM_NEWRULE, |
| NLM_F_MULTI, ops); |
| - if (err) |
| + if (err < 0) |
| break; |
| skip: |
| idx++; |