On Thu, Jul 7, 2022 at 12:18 PM Justin Stitt <justinstitt@xxxxxxxxxx> wrote: > > When building with Clang we encounter these warnings: > | net/netfilter/xt_TPROXY.c:173:5: error: format specifies type 'unsigned > | char' but the argument has type 'int' [-Werror,-Wformat] tproto, > | &iph->saddr, ntohs(hp->source), > - > | net/netfilter/xt_TPROXY.c:181:4: error: format specifies type 'unsigned > | char' but the argument has type 'int' [-Werror,-Wformat] tproto, > | &iph->saddr, ntohs(hp->source), > > The format specifier `%hhu` refers to a u8 while tproto is an int. In > this case we weren't losing any data because ipv6_find_hdr returns an > int but its return value (nexthdr) is a u8. This u8 gets widened to an > int when returned from ipv6_find_hdr and assigned to tproto. The > previous format specifier is functionally fine but still produces a > warning due to a type mismatch. > > The fix is simply to listen to Clang and change `%hhu` to `%d` for both > instances of the warning. > > Link: https://github.com/ClangBuiltLinux/linux/issues/378 > Signed-off-by: Justin Stitt <justinstitt@xxxxxxxxxx> Thanks for the patch, this fixes the warning I observe when building ARCH=arm64 allmodconfig with -Wno-format removed! Reviewed-by: Nick Desaulniers <ndesaulniers@xxxxxxxxxx> Tested-by: Nick Desaulniers <ndesaulniers@xxxxxxxxxx> > --- > It should be noted that for this entire file to build without -Wformat > warnings you should apply this `ntohs` patch which fixed many, many > -Wformat warnings in the kernel. > https://lore.kernel.org/all/20220608223539.470472-1-justinstitt@xxxxxxxxxx/ > > net/netfilter/xt_TPROXY.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/net/netfilter/xt_TPROXY.c b/net/netfilter/xt_TPROXY.c > index 459d0696c91a..5d74abffc94f 100644 > --- a/net/netfilter/xt_TPROXY.c > +++ b/net/netfilter/xt_TPROXY.c > @@ -169,7 +169,7 @@ tproxy_tg6_v1(struct sk_buff *skb, const struct xt_action_param *par) > targets on the same rule yet */ > skb->mark = (skb->mark & ~tgi->mark_mask) ^ tgi->mark_value; > > - pr_debug("redirecting: proto %hhu %pI6:%hu -> %pI6:%hu, mark: %x\n", > + pr_debug("redirecting: proto %d %pI6:%hu -> %pI6:%hu, mark: %x\n", > tproto, &iph->saddr, ntohs(hp->source), > laddr, ntohs(lport), skb->mark); > > @@ -177,7 +177,7 @@ tproxy_tg6_v1(struct sk_buff *skb, const struct xt_action_param *par) > return NF_ACCEPT; > } > > - pr_debug("no socket, dropping: proto %hhu %pI6:%hu -> %pI6:%hu, mark: %x\n", > + pr_debug("no socket, dropping: proto %d %pI6:%hu -> %pI6:%hu, mark: %x\n", > tproto, &iph->saddr, ntohs(hp->source), > &iph->daddr, ntohs(hp->dest), skb->mark); > > -- > 2.37.0.rc0.161.g10f37bed90-goog > -- Thanks, ~Nick Desaulniers