Message ID | 20220707191745.840590-1-justinstitt@google.com (mailing list archive) |
---|---|
State | Awaiting Upstream |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | netfilter: xt_TPROXY: fix clang -Wformat warnings: | expand |
On Thu, Jul 7, 2022 at 12:18 PM Justin Stitt <justinstitt@google.com> 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@google.com> Thanks for the patch, this fixes the warning I observe when building ARCH=arm64 allmodconfig with -Wno-format removed! Reviewed-by: Nick Desaulniers <ndesaulniers@google.com> Tested-by: Nick Desaulniers <ndesaulniers@google.com> > --- > 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@google.com/ > > 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 >
On Thu, Jul 07, 2022 at 12:17:45PM -0700, Justin Stitt wrote: > 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); Could you instead send a patch to remove these pr_debug calls? Thanks.
On Mon, Jul 11, 2022 at 2:04 AM Pablo Neira Ayuso <pablo@netfilter.org> wrote: > > On Thu, Jul 07, 2022 at 12:17:45PM -0700, Justin Stitt wrote: > > 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); > > Could you instead send a patch to remove these pr_debug calls? Do you mean all Instances of pr_debug in `xt_TPROXY.c` (of which there are six) or just these two specific cases @ +169 and +177. > Thanks.
On Mon, Jul 11, 2022 at 12:44:05PM -0700, Justin Stitt wrote: > On Mon, Jul 11, 2022 at 2:04 AM Pablo Neira Ayuso <pablo@netfilter.org> wrote: > > > > On Thu, Jul 07, 2022 at 12:17:45PM -0700, Justin Stitt wrote: > > > 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); > > > > Could you instead send a patch to remove these pr_debug calls? > > Do you mean all Instances of pr_debug in `xt_TPROXY.c` (of which there > are six) or just these two specific cases @ +169 and +177. Yes, remove all pr_debug instances, thanks.
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);
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@google.com> --- 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@google.com/ net/netfilter/xt_TPROXY.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)