summaryrefslogtreecommitdiff
path: root/net/netlink/genetlink.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/netlink/genetlink.c')
-rw-r--r--net/netlink/genetlink.c27
1 files changed, 15 insertions, 12 deletions
diff --git a/net/netlink/genetlink.c b/net/netlink/genetlink.c
index 3e16527beb91..0a7a856e9ce0 100644
--- a/net/netlink/genetlink.c
+++ b/net/netlink/genetlink.c
@@ -1319,21 +1319,24 @@ static int ctrl_dumppolicy(struct sk_buff *skb, struct netlink_callback *cb)
void *hdr;
if (!ctx->policies) {
- while (ctx->opidx < genl_get_cmd_cnt(ctx->rt)) {
- struct genl_ops op;
+ struct genl_ops op;
- if (ctx->single_op) {
- int err;
+ if (ctx->single_op) {
+ int err;
- err = genl_get_cmd(ctx->op, ctx->rt, &op);
- if (WARN_ON(err))
- return skb->len;
+ err = genl_get_cmd(ctx->op, ctx->rt, &op);
+ if (WARN_ON(err))
+ return err;
- /* break out of the loop after this one */
- ctx->opidx = genl_get_cmd_cnt(ctx->rt);
- } else {
- genl_get_cmd_by_index(ctx->opidx, ctx->rt, &op);
- }
+ if (ctrl_dumppolicy_put_op(skb, cb, &op))
+ return skb->len;
+
+ /* don't enter the loop below */
+ ctx->opidx = genl_get_cmd_cnt(ctx->rt);
+ }
+
+ while (ctx->opidx < genl_get_cmd_cnt(ctx->rt)) {
+ genl_get_cmd_by_index(ctx->opidx, ctx->rt, &op);
if (ctrl_dumppolicy_put_op(skb, cb, &op))
return skb->len;