Linux Netfilter development
 help / color / mirror / Atom feed
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
> 

  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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox