Subject: Re: [vserver] Kernel build failures with IPv6 as a module
From: Chris Richardson <cr@fourc.eu>
Date: Sat, 3 Nov 2018 18:53:10 +0000
Sat, 3 Nov 2018 18:53:10 +0000
On Sat, 3 Nov 2018 at 17:36, Herbert Poetzl <herbert@13thfloor.at> wrote:
>
> On Sat, Nov 03, 2018 at 11:28:47AM +0000, Chris Richardson wrote:
> > Hi Herbert, thanks for your response!
>
> You're welcome!
>
> > On Sat, 3 Nov 2018 at 11:14, Herbert Poetzl <herbert@13thfloor.at> wrote:
>
> >> On Fri, Nov 02, 2018 at 11:29:01PM +0000, Chris Richardson wrote:
> >>> Hi,
>
> >> Hey Chris,
>
> >>> I'm getting a build failure after applying any of the most
> >>> recent vserver patches, for instance
> >>> http://vserver.13thfloor.at/Experimental/patch-4.9.135-vs2.3.9.8.diff.
>
> >>> I've tracked the cause down to the fact that I have IPv6 support
> >>> configured as a module and the vserver code uses statements like
>
> >>> #if CONFIG IPV6
> >>> rather than the kernel macro
> >>> #if IS ENABLED(CONFIG IPV6)
>
> >> It is definitely a bug somewhere in the config system as
> >> Linux-VServer should force IPv6 to 'y' or 'n' and disallow
> >> building it as a module.
>
> >>> I'm wondering if this a bug, or if it perhaps not make
> >>> sense to configure IPv6 as a module in the vserver context?
>
> >> Building IPv6 as a module is currently not supported by
> >> Linux-VServer, so it doesn't make sense to do that with
> >> the Linux-VServer patches but as I implied, the build
> >> system should take care of this and prevent you from
> >> selecting 'm' in the first place.
>
> >> I'd appreciate if you could upload (or attach) the .config
> >> you are using so that we can figure out why the build
> >> system doesn't prevent you from building IPv6 as a module.
>
> > This makes me realise that I'm doing everything wrong - my
> > approach has been to manually patch my kernel source and
> > manually configure the kernel, ie. I'm not using the build
> > system to which you refer - I guess I should be.
>
> You might not be as wrong as you think, because I was referring
> to the Kernel Build System, which you are very likely using
> after all.
>
> Note there is nothing wrong with manually patching and then
> (manually or not) configuring the kernel according to your needs.
>
> But just to make sure, maybe you could describe what you did
> and as suggested, provide your .config file for us to reproduce
> the issue.

Ah, I see what you mean now. The way I might have been jinxing the
system was by applying the vserver patch and then copying in a kernel
config which I had previously created - with IPv6 as a module.
My config is attached, now with IPv6 enabled. I'm not sure it'll be of
great interest though, it's a pretty generic one.

Following what you said above regarding disabling of the module
option, I've tried configuring from scratch and can reproduce as
follows:

wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.9.135.tar.xz
tar xf linux-4.9.135.tar.xz
cd linux-4.9.135/
wget http://vserver.13thfloor.at/Experimental/patch-4.9.135-vs2.3.9.8.diff
patch -p1 < patch-4.9.135-vs2.3.9.8.diff
make menuconfig  # <- allows selecting IPv6 as a module
make xconfig  # <- also allows selecting IPv6 as a module
make -j12 # fails if IPv6 is selected as a module with the following output

Output:
In file included from net/ipv6/inet6 hashtables.c:19:0:
./include/linux/vs inet6.h:239:30: warning: ‘struct in ifaddr’
declared inside parameter list will not be visible outside of this
definition or declaration
 int v6 ifa in nx info(struct in ifaddr *a, struct nx info *n)
                              ^~~~~~~~~
net/ipv6/inet6 hashtables.c: In function ‘ipv6 rcv saddr equal’:
net/ipv6/inet6 hashtables.c:320:47: warning: passing argument 2 of
‘nx v6 addr conflict’ makes integer from pointer without a cast
[-Wint-conversion]
   return nx v6 addr conflict(sk1->sk nx info, sk2->sk nx info);
                                               ^~~
In file included from net/ipv6/inet6 hashtables.c:19:0:
./include/linux/vs inet6.h:233:5: note: expected ‘uint32 t {aka
unsigned int}’ but argument is of type ‘struct nx info * const’
 int nx v6 addr conflict(struct nx info *n, uint32 t a, const struct sock *s)
     ^~~~~~~~~~~~~~~~~~~
net/ipv6/inet6 hashtables.c:320:10: error: too few arguments to
function ‘nx v6 addr conflict’
   return nx v6 addr conflict(sk1->sk nx info, sk2->sk nx info);
          ^~~~~~~~~~~~~~~~~~~
In file included from net/ipv6/inet6 hashtables.c:19:0:
./include/linux/vs inet6.h:233:5: note: declared here
 int nx v6 addr conflict(struct nx info *n, uint32 t a, const struct sock *s)

My interpretation of this is that the precompiler takes the wrong
sections of code because it's expecting CONFIG IPV6 to be set rather
than CONFIG IPV6 MODULE (as per my OP).

HTH!
Chris

>
> > So actually the only problem is between my keyboard and chair.
>
> Not convinced yet :)
>
> > Thanks again for your help!
>
> You're welcome!
>
> Best,
> Herbert
>
> >>> Apologies if I'm asking a stupid question, I'm new to vserver!
>
> >> There are no stupid questions, just stupid answers.
>
> >> Welcome to Linux-VServer!
>
> >> Best,
> >> Herbert
>
> >>> --
>
> >>> Chris Richardson, System Architect
> >>> cr@fourc.eu
>
> >>> FourC AS, Vestre Rosten 81, Trekanten, NO-7075 Tiller, Norway
> >>> www.fourc.eu
>
> >>> Follow us on LinkedIn, Facebook, Google+ and Twitter!
>
>
>
> > --
>
> > Chris Richardson, System Architect
> > cr@fourc.eu
>
> > FourC AS, Vestre Rosten 81, Trekanten, NO-7075 Tiller, Norway
> > www.fourc.eu
>
> > Follow us on LinkedIn, Facebook, Google+ and Twitter!



-- 

Chris Richardson, System Architect
cr@fourc.eu

FourC AS, Vestre Rosten 81, Trekanten, NO-7075 Tiller, Norway
www.fourc.eu

Follow us on LinkedIn, Facebook, Google+ and Twitter!


["application/octet-stream" not shown]