2020-01-31 03:15:16

by Stephen Rothwell

[permalink] [raw]
Subject: linux-next: build failure after merge of the akpm-current tree

Hi all,

After merging the akpm-current tree, today's linux-next build (arm
multi_v7_defconfig) failed like this:

net/sunrpc/auth_gss/svcauth_gss.c: In function 'gss_proxy_save_rsc':
net/sunrpc/auth_gss/svcauth_gss.c:1251:19: error: storage size of 'boot' isn't known
1251 | struct timespec boot;
| ^~~~
net/sunrpc/auth_gss/svcauth_gss.c:1273:3: error: implicit declaration of function 'getboottime'; did you mean 'getboottime64'? [-Werror=implicit-function-declaration]
1273 | getboottime(&boot);
| ^~~~~~~~~~~
| getboottime64
net/sunrpc/auth_gss/svcauth_gss.c:1251:19: warning: unused variable 'boot' [-Wunused-variable]
1251 | struct timespec boot;
| ^~~~

Caused by commit

a415f20a18c9 ("sunrpc: expiry_time should be seconds not timeval")

from the nfsd tree interacting with commits

de371b6c7b73 ("y2038: remove unused time32 interfaces")
aa7ff200a719 ("y2038: hide timeval/timespec/itimerval/itimerspec types")

from the akpm-current tree.

I have reverted the nfsd commit for today. A better solution is requested.

--
Cheers,
Stephen Rothwell


Attachments:
(No filename) (499.00 B)
OpenPGP digital signature

2020-02-01 00:34:45

by J. Bruce Fields

[permalink] [raw]
Subject: Re: linux-next: build failure after merge of the akpm-current tree

On Fri, Jan 31, 2020 at 02:13:09PM +1100, Stephen Rothwell wrote:
> Hi all,
>
> After merging the akpm-current tree, today's linux-next build (arm
> multi_v7_defconfig) failed like this:
>
> net/sunrpc/auth_gss/svcauth_gss.c: In function 'gss_proxy_save_rsc':
> net/sunrpc/auth_gss/svcauth_gss.c:1251:19: error: storage size of 'boot' isn't known
> 1251 | struct timespec boot;
> | ^~~~
> net/sunrpc/auth_gss/svcauth_gss.c:1273:3: error: implicit declaration of function 'getboottime'; did you mean 'getboottime64'? [-Werror=implicit-function-declaration]
> 1273 | getboottime(&boot);
> | ^~~~~~~~~~~
> | getboottime64
> net/sunrpc/auth_gss/svcauth_gss.c:1251:19: warning: unused variable 'boot' [-Wunused-variable]
> 1251 | struct timespec boot;
> | ^~~~
>
> Caused by commit
>
> a415f20a18c9 ("sunrpc: expiry_time should be seconds not timeval")
>
> from the nfsd tree interacting with commits
>
> de371b6c7b73 ("y2038: remove unused time32 interfaces")
> aa7ff200a719 ("y2038: hide timeval/timespec/itimerval/itimerspec types")
>
> from the akpm-current tree.
>
> I have reverted the nfsd commit for today. A better solution is requested.

Unfortunately that expiry time seems to be a signed 32-bit integer in
both the kernel<->gss-proxy and the gss-proxy<->krb5 interfaces.

I guess we'll have to come to an agreement with the krb5 developers.

Simplest might be to agree that the thing's unsigned. The expiry
shouldn't ever need to be decades in the future, so unsigned mod 2^32
arithmetic should work forever.

--b.

2020-02-01 07:56:27

by Arnd Bergmann

[permalink] [raw]
Subject: Re: linux-next: build failure after merge of the akpm-current tree

On Sat, Feb 1, 2020 at 1:32 AM J. Bruce Fields <[email protected]> wrote:
>
> On Fri, Jan 31, 2020 at 02:13:09PM +1100, Stephen Rothwell wrote:
> > Hi all,
> >
> > After merging the akpm-current tree, today's linux-next build (arm
> > multi_v7_defconfig) failed like this:
> >
> > net/sunrpc/auth_gss/svcauth_gss.c: In function 'gss_proxy_save_rsc':
> > net/sunrpc/auth_gss/svcauth_gss.c:1251:19: error: storage size of 'boot' isn't known
> > 1251 | struct timespec boot;
> > | ^~~~
> > net/sunrpc/auth_gss/svcauth_gss.c:1273:3: error: implicit declaration of function 'getboottime'; did you mean 'getboottime64'? [-Werror=implicit-function-declaration]
> > 1273 | getboottime(&boot);
> > | ^~~~~~~~~~~
> > | getboottime64
> > net/sunrpc/auth_gss/svcauth_gss.c:1251:19: warning: unused variable 'boot' [-Wunused-variable]
> > 1251 | struct timespec boot;
> > | ^~~~
> >
> > Caused by commit
> >
> > a415f20a18c9 ("sunrpc: expiry_time should be seconds not timeval")

This commit uses the now-removed 'struct timespec' type and 'getboottime()'
function, so to fix the compilation error, the 64-bit replacements need to e
used as described in Documentation/core-api/timekeeping.rst

> > from the nfsd tree interacting with commits
> >
> > de371b6c7b73 ("y2038: remove unused time32 interfaces")
> > aa7ff200a719 ("y2038: hide timeval/timespec/itimerval/itimerspec types")
> >
> > from the akpm-current tree.
> >
> > I have reverted the nfsd commit for today. A better solution is requested.
>
> Unfortunately that expiry time seems to be a signed 32-bit integer in
> both the kernel<->gss-proxy and the gss-proxy<->krb5 interfaces.
>
> I guess we'll have to come to an agreement with the krb5 developers.
>
> Simplest might be to agree that the thing's unsigned. The expiry
> shouldn't ever need to be decades in the future, so unsigned mod 2^32
> arithmetic should work forever.

Can you be more specific which interface you are referring to?
My change to gss_import_v1_context() is now part of mainline
as of 294ec5b87a8a ("sunrpc: convert to time64_t for expiry"),
is anything else needed there?

Arnd

2020-02-03 20:54:06

by J. Bruce Fields

[permalink] [raw]
Subject: Re: linux-next: build failure after merge of the akpm-current tree

On Sat, Feb 01, 2020 at 08:54:01AM +0100, Arnd Bergmann wrote:
> On Sat, Feb 1, 2020 at 1:32 AM J. Bruce Fields <[email protected]> wrote:
> >
> > On Fri, Jan 31, 2020 at 02:13:09PM +1100, Stephen Rothwell wrote:
> > > Hi all,
> > >
> > > After merging the akpm-current tree, today's linux-next build (arm
> > > multi_v7_defconfig) failed like this:
> > >
> > > net/sunrpc/auth_gss/svcauth_gss.c: In function 'gss_proxy_save_rsc':
> > > net/sunrpc/auth_gss/svcauth_gss.c:1251:19: error: storage size of 'boot' isn't known
> > > 1251 | struct timespec boot;
> > > | ^~~~
> > > net/sunrpc/auth_gss/svcauth_gss.c:1273:3: error: implicit declaration of function 'getboottime'; did you mean 'getboottime64'? [-Werror=implicit-function-declaration]
> > > 1273 | getboottime(&boot);
> > > | ^~~~~~~~~~~
> > > | getboottime64
> > > net/sunrpc/auth_gss/svcauth_gss.c:1251:19: warning: unused variable 'boot' [-Wunused-variable]
> > > 1251 | struct timespec boot;
> > > | ^~~~
> > >
> > > Caused by commit
> > >
> > > a415f20a18c9 ("sunrpc: expiry_time should be seconds not timeval")
>
> This commit uses the now-removed 'struct timespec' type and 'getboottime()'
> function, so to fix the compilation error, the 64-bit replacements need to e
> used as described in Documentation/core-api/timekeeping.rst
>
> > > from the nfsd tree interacting with commits
> > >
> > > de371b6c7b73 ("y2038: remove unused time32 interfaces")
> > > aa7ff200a719 ("y2038: hide timeval/timespec/itimerval/itimerspec types")
> > >
> > > from the akpm-current tree.
> > >
> > > I have reverted the nfsd commit for today. A better solution is requested.
> >
> > Unfortunately that expiry time seems to be a signed 32-bit integer in
> > both the kernel<->gss-proxy and the gss-proxy<->krb5 interfaces.
> >
> > I guess we'll have to come to an agreement with the krb5 developers.
> >
> > Simplest might be to agree that the thing's unsigned. The expiry
> > shouldn't ever need to be decades in the future, so unsigned mod 2^32
> > arithmetic should work forever.
>
> Can you be more specific which interface you are referring to?
> My change to gss_import_v1_context() is now part of mainline
> as of 294ec5b87a8a ("sunrpc: convert to time64_t for expiry"),
> is anything else needed there?

Oops, thanks, I was looking at a branch without that patch and forgot
that it changed that field to unsigned.

Looking at gss-proxy: it gets this expiration time from the krb5
libraries with a call to gss_inquire_context(..., &lifetime_rec, ...)
where lifetime_rec is uint32_t.

Treating this as a 64-bit time makes everything work till 2106, but, for
what it's worth, keeping it a u32 would make it correct forever (since
mod-2^32 subtraction will still give a reasonable answer).

--b.