From: David Laight <david.laight.linux@gmail.com>
To: Avinash Duduskar <avinash.duduskar@gmail.com>
Cc: netdev@vger.kernel.org, davem@davemloft.net, edumazet@google.com,
kuba@kernel.org, pabeni@redhat.com, horms@kernel.org,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH net-next] llc: avoid sparse cast-truncates warning in counter clamps
Date: Sat, 16 May 2026 11:23:47 +0100 [thread overview]
Message-ID: <20260516112347.68aba670@pumpkin> (raw)
In-Reply-To: <20260513092253.3035961-1-avinash.duduskar@gmail.com>
On Wed, 13 May 2026 14:52:53 +0530
Avinash Duduskar <avinash.duduskar@gmail.com> wrote:
> llc_conn_ac_inc_npta_value() and llc_conn_ac_inc_tx_win_size()
> clamp their counters to the maximum valid 7-bit value via
> (u8) ~LLC_2_SEQ_NBR_MODULO. LLC_2_SEQ_NBR_MODULO is defined as
> ((u8) 128) in include/net/llc_pdu.h,
That (u8) cast is entirely pointless.
Whenever the value is used it is subject to integer promotion
and becomes a signed 128.
> but the (u8) cast does not
> prevent integer promotion of the operand of ~: ~128 is computed
> as int (0xffffff7f), and the surrounding (u8) cast truncates
> back to 0x7f. The result is correct (127), but the implicit
> truncation is flagged by sparse:
>
> net/llc/llc_c_ac.c:1008:38: warning: cast truncates bits from
> constant value (ffffff7f becomes 7f)
> (and three more at lines 1009, 1099, 1100)
>
> Replace the (u8) ~LLC_2_SEQ_NBR_MODULO expression with
> LLC_2_SEQ_NBR_MODULO - 1, which evaluates to 127 directly and
> silences sparse.
>
> The same ~LLC_2_SEQ_NBR_MODULO pattern also appears in
> include/net/llc_pdu.h:148 as part of PDU_GET_NEXT_Vr, but there
> the result is immediately &-masked, so the int promotion is
> harmless and sparse does not flag it; it is left alone.
>
> This patch is the minimum diff to silence the warning. The
> counter-clamp idiom itself could be modernized to
> min_t(u8, ..., LLC_2_SEQ_NBR_MODULO - 1), but that is a
> separate cleanup left for another patch.
Using min_t() (especially with u8 or u16) is a very bad idea.
Consider what would would happen if the limit were 255.
>
> No functional change.
>
> Signed-off-by: Avinash Duduskar <avinash.duduskar@gmail.com>
> ---
> Built with CONFIG_LLC2=m; full kernel build clean, sparse no
> longer warns on the touched lines.
>
> net/llc/llc_c_ac.c | 8 ++++----
> 1 file changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/net/llc/llc_c_ac.c b/net/llc/llc_c_ac.c
> index 0779daa8aa8f..ab86c720b3ec 100644
> --- a/net/llc/llc_c_ac.c
> +++ b/net/llc/llc_c_ac.c
> @@ -1005,8 +1005,8 @@ static int llc_conn_ac_inc_npta_value(struct sock *sk, struct sk_buff *skb)
> llc->dec_step = 0;
> llc->dec_cntr = llc->inc_cntr = 2;
> ++llc->npta;
> - if (llc->npta > (u8) ~LLC_2_SEQ_NBR_MODULO)
> - llc->npta = (u8) ~LLC_2_SEQ_NBR_MODULO;
> + if (llc->npta > LLC_2_SEQ_NBR_MODULO - 1)
> + llc->npta = LLC_2_SEQ_NBR_MODULO - 1;
If you rewrite it, do the check before the increment.
The compiler doesn't know that llc->npta isn't 255 - when the result
of the above is 0. That can generate rather more code.
Probably best to do:
if (llc->npta < LLC_2_SEQ_NBR_MODULO - 1)
llc->npta++;
-- David
> } else
> --llc->inc_cntr;
> return 0;
> @@ -1096,8 +1096,8 @@ int llc_conn_ac_inc_tx_win_size(struct sock *sk, struct sk_buff *skb)
> struct llc_sock *llc = llc_sk(sk);
>
> llc->k += 1;
> - if (llc->k > (u8) ~LLC_2_SEQ_NBR_MODULO)
> - llc->k = (u8) ~LLC_2_SEQ_NBR_MODULO;
> + if (llc->k > LLC_2_SEQ_NBR_MODULO - 1)
> + llc->k = LLC_2_SEQ_NBR_MODULO - 1;
> return 0;
> }
>
>
> base-commit: 8ebd24a7822cbae25beeafba49b2159d6a68a5f2
prev parent reply other threads:[~2026-05-16 10:23 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-13 9:22 [PATCH net-next] llc: avoid sparse cast-truncates warning in counter clamps Avinash Duduskar
2026-05-16 1:00 ` patchwork-bot+netdevbpf
2026-05-16 10:23 ` David Laight [this message]
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=20260516112347.68aba670@pumpkin \
--to=david.laight.linux@gmail.com \
--cc=avinash.duduskar@gmail.com \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=horms@kernel.org \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
/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.