Re: [vserver] Kernel build failures with IPv6 as a module

From: Chris Richardson <cr_at_fourc.eu>
Date: Sat 03 Nov 2018 - 18:53:10 GMT
Message-ID: <CANHdcqOYFRs0RE7fMmPcsHKG2ALU2q0wT1KCMsAU5qEYC5jaEg@mail.gmail.com>

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!

Received on Sat Nov 3 18:43:40 2018
[Next/Previous Months] [Main vserver Project Homepage] [Howto Subscribe/Unsubscribe] [Paul Sladen's vserver stuff]
Generated on Sat 03 Nov 2018 - 18:43:40 GMT by hypermail 2.1.8