From: Pablo Neira Ayuso <pablo@netfilter.org>
To: Phil Sutter <phil@nwl.cc>
Cc: netfilter-devel@vger.kernel.org
Subject: Re: [nft PATCH v2] Fix for warnings when compiling for 32bit arch
Date: Sun, 4 Oct 2026 22:29:51 +0200 [thread overview]
Message-ID: <asK3PzqW4orq3BmH@chamomile> (raw)
In-Reply-To: <20261002144547.2293527-1-phil@nwl.cc>
On Fri, Oct 02, 2026 at 04:45:38PM +0200, Phil Sutter wrote:
> This eliminates several, probably harmless warnings when e.g. compiling
> with '-m32' for x86_64:
>
> - Printing code assumes NFT_MAX_EXPR_LEN_BITS is unsigned long, when on
> 32bit it is unsigned int - cast to uint32_t and print using '%d'.
>
> - Pointers are unsigned long, casting to uint64_t yields a warning on
> 32bit due to the different size
>
> - Bison tokens of type 'val' are uint64_t, print their values using
> PRIu64 macro
>
> - On 32bit, UINT32_MAX is of type unsigned int - cast to off_t when
> comparing against state->indesc->line_offset to avoid different
> signedness warning
>
> Signed-off-by: Phil Sutter <phil@nwl.cc>
Tested-by: Pablo Neira Ayuso <pablo@netfilter.org>
Thanks Phil.
> ---
> Changes since v1:
> - Prefer 32bit type for NFT_MAX_EXPR_LEN_B{IT,YTE}S
> ---
> include/expression.h | 2 +-
> src/evaluate.c | 4 ++--
> src/netlink_linearize.c | 4 ++--
> src/parser_bison.y | 2 +-
> src/parser_json.c | 4 ++--
> src/scanner.l | 2 +-
> 6 files changed, 9 insertions(+), 9 deletions(-)
>
> diff --git a/include/expression.h b/include/expression.h
> index e6a05603552b5..844f16b8a04b0 100644
> --- a/include/expression.h
> +++ b/include/expression.h
> @@ -11,7 +11,7 @@
> #include <json.h>
> #include <libnftnl/udata.h>
>
> -#define NFT_MAX_EXPR_LEN_BYTES (NFT_REG32_COUNT * sizeof(uint32_t))
> +#define NFT_MAX_EXPR_LEN_BYTES ((uint32_t)(NFT_REG32_COUNT * sizeof(uint32_t)))
> #define NFT_MAX_EXPR_LEN_BITS (NFT_MAX_EXPR_LEN_BYTES * BITS_PER_BYTE)
> #define NFT_MAX_EXPR_RECURSION 16
>
> diff --git a/src/evaluate.c b/src/evaluate.c
> index 4f5f2694e7ed4..01b4afbbb10d8 100644
> --- a/src/evaluate.c
> +++ b/src/evaluate.c
> @@ -1828,7 +1828,7 @@ static int expr_evaluate_concat(struct eval_ctx *ctx, struct expr **expr)
> ctx->inner_desc = NULL;
>
> if (size > NFT_MAX_EXPR_LEN_BITS)
> - return expr_error(ctx->msgs, i, "Concatenation of size %u exceeds maximum size of %lu",
> + return expr_error(ctx->msgs, i, "Concatenation of size %u exceeds maximum size of %u",
> size, NFT_MAX_EXPR_LEN_BITS);
> }
>
> @@ -5191,7 +5191,7 @@ static int set_expr_evaluate_concat(struct eval_ctx *ctx, struct expr **expr)
> size += netlink_padded_len(i->len);
>
> if (size > NFT_MAX_EXPR_LEN_BITS)
> - return expr_error(ctx->msgs, i, "Concatenation of size %u exceeds maximum size of %lu",
> + return expr_error(ctx->msgs, i, "Concatenation of size %u exceeds maximum size of %u",
> size, NFT_MAX_EXPR_LEN_BITS);
> }
>
> diff --git a/src/netlink_linearize.c b/src/netlink_linearize.c
> index dfa841c6a407f..8de507059fe59 100644
> --- a/src/netlink_linearize.c
> +++ b/src/netlink_linearize.c
> @@ -31,7 +31,7 @@ struct nft_expr_loc *nft_expr_loc_find(const struct nftnl_expr *nle,
> struct nft_expr_loc *eloc;
> uint32_t hash;
>
> - hash = (uint64_t)nle % NFT_EXPR_LOC_HSIZE;
> + hash = (unsigned long)nle % NFT_EXPR_LOC_HSIZE;
> list_for_each_entry(eloc, &ctx->expr_loc_htable[hash], hlist) {
> if (eloc->nle == nle)
> return eloc;
> @@ -50,7 +50,7 @@ static void nft_expr_loc_add(const struct nftnl_expr *nle,
> eloc = xmalloc(sizeof(*eloc));
> eloc->nle = nle;
> eloc->loc = loc;
> - hash = (uint64_t)nle % NFT_EXPR_LOC_HSIZE;
> + hash = (unsigned long)nle % NFT_EXPR_LOC_HSIZE;
> list_add_tail(&eloc->hlist, &ctx->expr_loc_htable[hash]);
> }
>
> diff --git a/src/parser_bison.y b/src/parser_bison.y
> index 6e1c1cc205331..bf2a136796619 100644
> --- a/src/parser_bison.y
> +++ b/src/parser_bison.y
> @@ -5887,7 +5887,7 @@ payload_expr : payload_raw_expr
> payload_raw_len : NUM
> {
> if ($1 > NFT_MAX_EXPR_LEN_BITS) {
> - erec_queue(error(&@1, "raw payload length %lu exceeds upper limit of %lu",
> + erec_queue(error(&@1, "raw payload length %" PRIu64 " exceeds upper limit of %u",
> $1, NFT_MAX_EXPR_LEN_BITS),
> state->msgs);
> YYERROR;
> diff --git a/src/parser_json.c b/src/parser_json.c
> index 0522b2cd80b96..14259ea39777b 100644
> --- a/src/parser_json.c
> +++ b/src/parser_json.c
> @@ -673,7 +673,7 @@ static struct expr *json_parse_payload_expr(struct json_ctx *ctx,
> }
>
> if (len <= 0 || len > (int)NFT_MAX_EXPR_LEN_BITS) {
> - json_error(ctx, "Payload length must be between 0 and %lu, got %d",
> + json_error(ctx, "Payload length must be between 0 and %u, got %d",
> NFT_MAX_EXPR_LEN_BITS, len);
> return NULL;
> }
> @@ -750,7 +750,7 @@ static struct expr *json_parse_tcp_option_expr(struct json_ctx *ctx,
> return NULL;
>
> if (len < 0 || len > (int)NFT_MAX_EXPR_LEN_BITS) {
> - json_error(ctx, "option length must be between 0 and %lu, got %d",
> + json_error(ctx, "option length must be between 0 and %u, got %d",
> NFT_MAX_EXPR_LEN_BITS, len);
> return NULL;
> }
> diff --git a/src/scanner.l b/src/scanner.l
> index 61fcc4fa3bad3..37729ebc3cc55 100644
> --- a/src/scanner.l
> +++ b/src/scanner.l
> @@ -91,7 +91,7 @@ static void update_offset(struct parser_state *state, struct location *loc,
> uint32_t line_offset;
>
> state->indesc->token_offset += len;
> - if (state->indesc->line_offset > UINT32_MAX)
> + if (state->indesc->line_offset > (off_t)UINT32_MAX)
> line_offset = UINT32_MAX;
> else
> line_offset = state->indesc->line_offset;
> --
> 2.54.0
>
next prev parent reply other threads:[~2026-10-04 20:29 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-02 14:45 [nft PATCH v2] Fix for warnings when compiling for 32bit arch Phil Sutter
2026-10-04 20:29 ` Pablo Neira Ayuso [this message]
2026-10-06 9:30 ` Phil Sutter
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=asK3PzqW4orq3BmH@chamomile \
--to=pablo@netfilter.org \
--cc=netfilter-devel@vger.kernel.org \
--cc=phil@nwl.cc \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.