2023-10-03 03:29:34

by Stephen Rothwell

[permalink] [raw]
Subject: linux-next: build warning after merge of the landlock tree

Hi all,

After merging the landlock tree, today's linux-next build (powerpc
allyesconfig) produced this warning:

samples/landlock/sandboxer.c: In function 'populate_ruleset_net':
samples/landlock/sandboxer.c:170:78: warning: format '%llu' expects argument of type 'long long unsigned int', but argument 3 has type '__u64' {aka 'long unsigned int'} [-Wformat=]
170 | "Failed to update the ruleset with port \"%llu\": %s\n",
| ~~~^
| |
| long long unsigned int
| %lu
171 | net_port.port, strerror(errno));
| ~~~~~~~~~~~~~
| |
| __u64 {aka long unsigned int}

Introduced by commit

24889e7a2079 ("samples/landlock: Add network demo")

--
Cheers,
Stephen Rothwell


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

2023-10-03 13:16:00

by Mickaël Salaün

[permalink] [raw]
Subject: Re: linux-next: build warning after merge of the landlock tree

PowerPC-64 follows the LP64 data model and then uses int-l64.h (instead of
int-ll64.h like most architectures) for user space code.

Here is the same code with the (suggested) "%lu" token on x86_86:

samples/landlock/sandboxer.c: In function ‘populate_ruleset_net’:
samples/landlock/sandboxer.c:170:77: error: format ‘%lu’ expects argument of type ‘long unsigned int’, but argument 3 has type ‘__u64’ {aka ‘long long unsigned int’} [-Werror=format=]
170 | "Failed to update the ruleset with port \"%lu\": %s\n",
| ~~^
| |
| long unsigned int
| %llu
171 | net_port.port, strerror(errno));
| ~~~~~~~~~~~~~
| |
| __u64 {aka long long unsigned int}


We would then need to cast __u64 to unsigned long long to avoid this warning,
which may look useless, of even buggy, for people taking a look at this sample.

Anyway, it makes more sense to cast it to __u16 because it is the
expected type for a TCP port. I'm updating the patch with that.
Konstantin, please take this fix for the next series:
https://git.kernel.org/mic/c/fc9de206a61a


On Tue, Oct 03, 2023 at 02:27:37PM +1100, Stephen Rothwell wrote:
> Hi all,
>
> After merging the landlock tree, today's linux-next build (powerpc
> allyesconfig) produced this warning:
>
> samples/landlock/sandboxer.c: In function 'populate_ruleset_net':
> samples/landlock/sandboxer.c:170:78: warning: format '%llu' expects argument of type 'long long unsigned int', but argument 3 has type '__u64' {aka 'long unsigned int'} [-Wformat=]
> 170 | "Failed to update the ruleset with port \"%llu\": %s\n",
> | ~~~^
> | |
> | long long unsigned int
> | %lu
> 171 | net_port.port, strerror(errno));
> | ~~~~~~~~~~~~~
> | |
> | __u64 {aka long unsigned int}
>
> Introduced by commit
>
> 24889e7a2079 ("samples/landlock: Add network demo")
>
> --
> Cheers,
> Stephen Rothwell


2023-10-03 13:23:57

by Geert Uytterhoeven

[permalink] [raw]
Subject: Re: linux-next: build warning after merge of the landlock tree

Hi Mickaël,

On Tue, Oct 3, 2023 at 3:15 PM Mickaël Salaün <[email protected]> wrote:
> On Tue, Oct 03, 2023 at 02:27:37PM +1100, Stephen Rothwell wrote:
> > After merging the landlock tree, today's linux-next build (powerpc
> > allyesconfig) produced this warning:
> >
> > samples/landlock/sandboxer.c: In function 'populate_ruleset_net':
> > samples/landlock/sandboxer.c:170:78: warning: format '%llu' expects argument of type 'long long unsigned int', but argument 3 has type '__u64' {aka 'long unsigned int'} [-Wformat=]
> > 170 | "Failed to update the ruleset with port \"%llu\": %s\n",
> > | ~~~^
> > | |
> > | long long unsigned int
> > | %lu
> > 171 | net_port.port, strerror(errno));
> > | ~~~~~~~~~~~~~
> > | |
> > | __u64 {aka long unsigned int}
> >
> > Introduced by commit
> >
> > 24889e7a2079 ("samples/landlock: Add network demo")
>
> PowerPC-64 follows the LP64 data model and then uses int-l64.h (instead of
> int-ll64.h like most architectures) for user space code.
>
> Here is the same code with the (suggested) "%lu" token on x86_86:
>
> samples/landlock/sandboxer.c: In function ‘populate_ruleset_net’:
> samples/landlock/sandboxer.c:170:77: error: format ‘%lu’ expects argument of type ‘long unsigned int’, but argument 3 has type ‘__u64’ {aka ‘long long unsigned int’} [-Werror=format=]
> 170 | "Failed to update the ruleset with port \"%lu\": %s\n",
> | ~~^
> | |
> | long unsigned int
> | %llu
> 171 | net_port.port, strerror(errno));
> | ~~~~~~~~~~~~~
> | |
> | __u64 {aka long long unsigned int}
>
>
> We would then need to cast __u64 to unsigned long long to avoid this warning,
> which may look useless, of even buggy, for people taking a look at this sample.

In userspace code, you are supposed to #include <inttypes.h>
and use PRIu64.

> Anyway, it makes more sense to cast it to __u16 because it is the
> expected type for a TCP port. I'm updating the patch with that.
> Konstantin, please take this fix for the next series:
> https://git.kernel.org/mic/c/fc9de206a61a

Until someone passes a too large number, and it becomes truncated...

Gr{oetje,eeting}s,

Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- [email protected]

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds

2023-10-03 13:41:13

by Arnd Bergmann

[permalink] [raw]
Subject: Re: linux-next: build warning after merge of the landlock tree

On Tue, Oct 3, 2023, at 15:15, Mickaël Salaün wrote:
> PowerPC-64 follows the LP64 data model and then uses int-l64.h (instead of
> int-ll64.h like most architectures) for user space code.
>
> Here is the same code with the (suggested) "%lu" token on x86_86:
>
> samples/landlock/sandboxer.c: In function ‘populate_ruleset_net’:
> samples/landlock/sandboxer.c:170:77: error: format ‘%lu’ expects
> argument of type ‘long unsigned int’, but argument 3 has type ‘__u64’
> {aka ‘long long unsigned int’} [-Werror=format=]
> 170 | "Failed to update the ruleset
> with port \"%lu\": %s\n",
> |
> ~~^
> |
> |
> |
> long unsigned int
> |
> %llu
> 171 | net_port.port,
> strerror(errno));
> | ~~~~~~~~~~~~~
> | |
> | __u64 {aka long long
> unsigned int}
>
>
> We would then need to cast __u64 to unsigned long long to avoid this warning,
> which may look useless, of even buggy, for people taking a look at this sample.
>
> Anyway, it makes more sense to cast it to __u16 because it is the
> expected type for a TCP port. I'm updating the patch with that.
> Konstantin, please take this fix for the next series:
> https://git.kernel.org/mic/c/fc9de206a61a
>
>
> On Tue, Oct 03, 2023 at 02:27:37PM +1100, Stephen Rothwell wrote:
>> Hi all,
>>
>> After merging the landlock tree, today's linux-next build (powerpc
>> allyesconfig) produced this warning:
>>
>> samples/landlock/sandboxer.c: In function 'populate_ruleset_net':
>> samples/landlock/sandboxer.c:170:78: warning: format '%llu' expects argument of type 'long long unsigned int', but argument 3 has type '__u64' {aka 'long unsigned int'} [-Wformat=]
>> 170 | "Failed to update the ruleset with port \"%llu\": %s\n"

I think defining the __SANE_USERSPACE_TYPES__ macro should take care of this,
then __u64 has the same type as it does in the kernel.

Arnd

2023-10-04 11:02:14

by Mickaël Salaün

[permalink] [raw]
Subject: Re: linux-next: build warning after merge of the landlock tree

On Tue, Oct 03, 2023 at 03:23:22PM +0200, Geert Uytterhoeven wrote:
> Hi Mickaël,
>
> On Tue, Oct 3, 2023 at 3:15 PM Mickaël Salaün <[email protected]> wrote:
> > On Tue, Oct 03, 2023 at 02:27:37PM +1100, Stephen Rothwell wrote:
> > > After merging the landlock tree, today's linux-next build (powerpc
> > > allyesconfig) produced this warning:
> > >
> > > samples/landlock/sandboxer.c: In function 'populate_ruleset_net':
> > > samples/landlock/sandboxer.c:170:78: warning: format '%llu' expects argument of type 'long long unsigned int', but argument 3 has type '__u64' {aka 'long unsigned int'} [-Wformat=]
> > > 170 | "Failed to update the ruleset with port \"%llu\": %s\n",
> > > | ~~~^
> > > | |
> > > | long long unsigned int
> > > | %lu
> > > 171 | net_port.port, strerror(errno));
> > > | ~~~~~~~~~~~~~
> > > | |
> > > | __u64 {aka long unsigned int}
> > >
> > > Introduced by commit
> > >
> > > 24889e7a2079 ("samples/landlock: Add network demo")
> >
> > PowerPC-64 follows the LP64 data model and then uses int-l64.h (instead of
> > int-ll64.h like most architectures) for user space code.
> >
> > Here is the same code with the (suggested) "%lu" token on x86_86:
> >
> > samples/landlock/sandboxer.c: In function ‘populate_ruleset_net’:
> > samples/landlock/sandboxer.c:170:77: error: format ‘%lu’ expects argument of type ‘long unsigned int’, but argument 3 has type ‘__u64’ {aka ‘long long unsigned int’} [-Werror=format=]
> > 170 | "Failed to update the ruleset with port \"%lu\": %s\n",
> > | ~~^
> > | |
> > | long unsigned int
> > | %llu
> > 171 | net_port.port, strerror(errno));
> > | ~~~~~~~~~~~~~
> > | |
> > | __u64 {aka long long unsigned int}
> >
> >
> > We would then need to cast __u64 to unsigned long long to avoid this warning,
> > which may look useless, of even buggy, for people taking a look at this sample.
>
> In userspace code, you are supposed to #include <inttypes.h>
> and use PRIu64.

Thanks for these tips!

>
> > Anyway, it makes more sense to cast it to __u16 because it is the
> > expected type for a TCP port. I'm updating the patch with that.
> > Konstantin, please take this fix for the next series:
> > https://git.kernel.org/mic/c/fc9de206a61a
>
> Until someone passes a too large number, and it becomes truncated...

That should not happen because it is checked by the kernel (for this
specific case), but let's make it simple and print the 64-bit value.

>
> Gr{oetje,eeting}s,
>
> Geert
>
> --
> Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- [email protected]
>
> In personal conversations with technical people, I call myself a hacker. But
> when I'm talking to journalists I just say "programmer" or something like that.
> -- Linus Torvalds

2023-10-04 11:04:43

by Mickaël Salaün

[permalink] [raw]
Subject: Re: linux-next: build warning after merge of the landlock tree

On Tue, Oct 03, 2023 at 03:40:23PM +0200, Arnd Bergmann wrote:
> On Tue, Oct 3, 2023, at 15:15, Mickaël Salaün wrote:
> > PowerPC-64 follows the LP64 data model and then uses int-l64.h (instead of
> > int-ll64.h like most architectures) for user space code.
> >
> > Here is the same code with the (suggested) "%lu" token on x86_86:
> >
> > samples/landlock/sandboxer.c: In function ‘populate_ruleset_net’:
> > samples/landlock/sandboxer.c:170:77: error: format ‘%lu’ expects
> > argument of type ‘long unsigned int’, but argument 3 has type ‘__u64’
> > {aka ‘long long unsigned int’} [-Werror=format=]
> > 170 | "Failed to update the ruleset
> > with port \"%lu\": %s\n",
> > |
> > ~~^
> > |
> > |
> > |
> > long unsigned int
> > |
> > %llu
> > 171 | net_port.port,
> > strerror(errno));
> > | ~~~~~~~~~~~~~
> > | |
> > | __u64 {aka long long
> > unsigned int}
> >
> >
> > We would then need to cast __u64 to unsigned long long to avoid this warning,
> > which may look useless, of even buggy, for people taking a look at this sample.
> >
> > Anyway, it makes more sense to cast it to __u16 because it is the
> > expected type for a TCP port. I'm updating the patch with that.
> > Konstantin, please take this fix for the next series:
> > https://git.kernel.org/mic/c/fc9de206a61a
> >
> >
> > On Tue, Oct 03, 2023 at 02:27:37PM +1100, Stephen Rothwell wrote:
> >> Hi all,
> >>
> >> After merging the landlock tree, today's linux-next build (powerpc
> >> allyesconfig) produced this warning:
> >>
> >> samples/landlock/sandboxer.c: In function 'populate_ruleset_net':
> >> samples/landlock/sandboxer.c:170:78: warning: format '%llu' expects argument of type 'long long unsigned int', but argument 3 has type '__u64' {aka 'long unsigned int'} [-Wformat=]
> >> 170 | "Failed to update the ruleset with port \"%llu\": %s\n"
>
> I think defining the __SANE_USERSPACE_TYPES__ macro should take care of this,
> then __u64 has the same type as it does in the kernel.

Thanks! I didn't know about this macro. We'll use that and print the
full 64-bit value.

>
> Arnd