On Tue, May 16, 2017 at 11:45 PM, Stephen Rothwell <sfr@xxxxxxxxxxxxxxxx> wrote: > Hi all, > > After merging the netfilter tree, today's linux-next build (i386 > defconfig) failed like this: > > net/netfilter/x_tables.c: In function 'xt_match_to_user': > net/netfilter/x_tables.c:303:13: error: implicit declaration of function 'COMPAT_XT_ALIGN' [-Werror=implicit-function-declaration] > C_SIZE ? COMPAT_XT_ALIGN(C_SIZE) : \ > ^ > net/netfilter/x_tables.c:310:9: note: in expansion of macro 'XT_DATA_TO_USER' > XT_DATA_TO_USER(u, m, match, 0); > ^ > > Caused by commit > > 324318f0248c ("netfilter: xtables: zero padding in data_to_user") > > In the !CONFIG_COMPAT case C_SIZE will always be zero, but the compiler > is still looking for the macro :-( Apologies for the breakage. > I added this cludge patch (I am sure it can be done better): > > From: Stephen Rothwell <sfr@xxxxxxxxxxxxxxxx> > Date: Wed, 17 May 2017 13:36:26 +1000 > Subject: [PATCH] netfilter: xtables: fix for zero padding in data_to_user > > Signed-off-by: Stephen Rothwell <sfr@xxxxxxxxxxxxxxxx> > --- > net/netfilter/x_tables.c | 8 ++++++++ > 1 file changed, 8 insertions(+) > > diff --git a/net/netfilter/x_tables.c b/net/netfilter/x_tables.c > index d17769599c10..2b1785993a92 100644 > --- a/net/netfilter/x_tables.c > +++ b/net/netfilter/x_tables.c > @@ -296,12 +296,20 @@ int xt_data_to_user(void __user *dst, const void *src, > } > EXPORT_SYMBOL_GPL(xt_data_to_user); > > +#ifdef CONFIG_COMPAT > #define XT_DATA_TO_USER(U, K, TYPE, C_SIZE) \ > xt_data_to_user(U->data, K->data, \ > K->u.kernel.TYPE->usersize, \ > C_SIZE ? : K->u.kernel.TYPE->TYPE##size, \ > C_SIZE ? COMPAT_XT_ALIGN(C_SIZE) : \ > XT_ALIGN(K->u.kernel.TYPE->TYPE##size)) > +#else > +#define XT_DATA_TO_USER(U, K, TYPE, C_SIZE) \ > + xt_data_to_user(U->data, K->data, \ > + K->u.kernel.TYPE->usersize, \ > + C_SIZE ? : K->u.kernel.TYPE->TYPE##size, \ > + C_SIZE ? : XT_ALIGN(K->u.kernel.TYPE->TYPE##size)) > +#endif > I will send a patch to the netfilter to define a separate COMPAT_XT_DATA_TO_USER inside the CONFIG_COMPAT region further down the file. This also allows simplifying XT_DATA_TO_USER by removing those ternary statements. -#define XT_DATA_TO_USER(U, K, TYPE, C_SIZE) \ +#define XT_DATA_TO_USER(U, K, TYPE) \ xt_data_to_user(U->data, K->data, \ K->u.kernel.TYPE->usersize, \ - C_SIZE ? : K->u.kernel.TYPE->TYPE##size, \ - C_SIZE ? COMPAT_XT_ALIGN(C_SIZE) : \ - XT_ALIGN(K->u.kernel.TYPE->TYPE##size)) + K->u.kernel.TYPE->TYPE##size, \ + XT_ALIGN(K->u.kernel.TYPE->TYPE##size)) and +#define COMPAT_XT_DATA_TO_USER(U, K, TYPE, C_SIZE) \ + xt_data_to_user(U->data, K->data, \ + K->u.kernel.TYPE->usersize, \ + C_SIZE, \ + COMPAT_XT_ALIGN(C_SIZE)) + -- To unsubscribe from this list: send the line "unsubscribe linux-next" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html