On Wed, 2019-08-14 at 09:58 -0700, Nathan Chancellor wrote: > clang warns: > > net/netfilter/nft_bitwise.c:138:50: error: size argument in 'memcmp' > call is a comparison [-Werror,-Wmemsize-comparison] > if (memcmp(&priv->xor, &zero, sizeof(priv->xor) || > ~~~~~~~~~~~~~~~~~~^~ > net/netfilter/nft_bitwise.c:138:6: note: did you mean to compare the > result of 'memcmp' instead? > if (memcmp(&priv->xor, &zero, sizeof(priv->xor) || > ^ > ) > net/netfilter/nft_bitwise.c:138:32: note: explicitly cast the argument > to size_t to silence this warning > if (memcmp(&priv->xor, &zero, sizeof(priv->xor) || > ^ > (size_t)( > 1 error generated. > > Adjust the parentheses so that the result of the sizeof is used for the > size argument in memcmp, rather than the result of the comparison (which > would always be true because sizeof is a non-zero number). > > Fixes: bd8699e9e292 ("netfilter: nft_bitwise: add offload support") > Link: https://github.com/ClangBuiltLinux/linux/issues/638 > Reported-by: kbuild test robot <lkp@xxxxxxxxx> > Signed-off-by: Nathan Chancellor <natechancellor@xxxxxxxxx> > --- > net/netfilter/nft_bitwise.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/net/netfilter/nft_bitwise.c b/net/netfilter/nft_bitwise.c [] > @@ -135,8 +135,8 @@ static int nft_bitwise_offload(struct nft_offload_ctx *ctx, > { > const struct nft_bitwise *priv = nft_expr_priv(expr); > > - if (memcmp(&priv->xor, &zero, sizeof(priv->xor) || > - priv->sreg != priv->dreg)) > + if (memcmp(&priv->xor, &zero, sizeof(priv->xor)) || > + priv->sreg != priv->dreg) This code should use memchr_inv and not compare against a static uninitialized struct. Perhaps linux should introduce and use memcchr like bsd. or just add something like #define memcchr memchr_inv