]> git.ipfire.org Git - thirdparty/nftables.git/commitdiff
src: remove arithmetic on booleans
authorJeremy Sowden <jeremy@azazel.net>
Tue, 21 Dec 2021 19:36:51 +0000 (19:36 +0000)
committerFlorian Westphal <fw@strlen.de>
Sat, 15 Jan 2022 16:07:43 +0000 (17:07 +0100)
Instead of subtracting a boolean from the protocol base for stacked
payloads, just decrement the base variable itself.

Signed-off-by: Jeremy Sowden <jeremy@azazel.net>
Signed-off-by: Florian Westphal <fw@strlen.de>
src/netlink.c
src/netlink_delinearize.c

index 359d801c29d350814637a7e2af021d432aad9643..5aad865955db4c73a8d6b4db2d7b16add8a36c8c 100644 (file)
@@ -1868,7 +1868,6 @@ static void trace_gen_stmts(struct list_head *stmts,
        const void *hdr;
        uint32_t hlen;
        unsigned int n;
-       bool stacked;
 
        if (!nftnl_trace_is_set(nlt, attr))
                return;
@@ -1923,6 +1922,8 @@ restart:
        n = 0;
 next:
        list_for_each_entry(stmt, &unordered, list) {
+               enum proto_bases b = base;
+
                rel = stmt->expr;
                lhs = rel->left;
 
@@ -1935,17 +1936,18 @@ next:
                list_move_tail(&stmt->list, stmts);
                n++;
 
-               stacked = payload_is_stacked(desc, rel);
+               if (payload_is_stacked(desc, rel))
+                       b--;
 
                if (lhs->flags & EXPR_F_PROTOCOL &&
                    pctx->pbase == PROTO_BASE_INVALID) {
-                       payload_dependency_store(pctx, stmt, base - stacked);
+                       payload_dependency_store(pctx, stmt, b);
                } else {
                        /* Don't strip 'icmp type' from payload dump. */
                        if (pctx->icmp_type == 0)
                                payload_dependency_kill(pctx, lhs, ctx->family);
                        if (lhs->flags & EXPR_F_PROTOCOL)
-                               payload_dependency_store(pctx, stmt, base - stacked);
+                               payload_dependency_store(pctx, stmt, b);
                }
 
                goto next;
index 83be2fec441d30b08bc01995bb49ad55e28a90cc..39b0574e38c8f47d0e6605a4185226608340b8f5 100644 (file)
@@ -1867,7 +1867,6 @@ static void payload_match_expand(struct rule_pp_ctx *ctx,
        struct stmt *nstmt;
        struct expr *nexpr = NULL;
        enum proto_bases base = left->payload.base;
-       bool stacked;
 
        payload_expr_expand(&list, left, &ctx->pctx);
 
@@ -1893,7 +1892,8 @@ static void payload_match_expand(struct rule_pp_ctx *ctx,
                assert(left->payload.base);
                assert(base == left->payload.base);
 
-               stacked = payload_is_stacked(ctx->pctx.protocol[base].desc, nexpr);
+               if (payload_is_stacked(ctx->pctx.protocol[base].desc, nexpr))
+                       base--;
 
                /* Remember the first payload protocol expression to
                 * kill it later on if made redundant by a higher layer
@@ -1902,12 +1902,12 @@ static void payload_match_expand(struct rule_pp_ctx *ctx,
                if (ctx->pdctx.pbase == PROTO_BASE_INVALID &&
                    expr->op == OP_EQ &&
                    left->flags & EXPR_F_PROTOCOL) {
-                       payload_dependency_store(&ctx->pdctx, nstmt, base - stacked);
+                       payload_dependency_store(&ctx->pdctx, nstmt, base);
                } else {
                        payload_dependency_kill(&ctx->pdctx, nexpr->left,
                                                ctx->pctx.family);
                        if (expr->op == OP_EQ && left->flags & EXPR_F_PROTOCOL)
-                               payload_dependency_store(&ctx->pdctx, nstmt, base - stacked);
+                               payload_dependency_store(&ctx->pdctx, nstmt, base);
                }
        }
        list_del(&ctx->stmt->list);