linux-m68k.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] m68k: mm: Remove size argument when calling strscpy()
@ 2025-03-02 23:05 Thorsten Blum
  2025-03-06 17:41 ` Jean-Michel Hautbois
  2025-03-06 17:44 ` Geert Uytterhoeven
  0 siblings, 2 replies; 9+ messages in thread
From: Thorsten Blum @ 2025-03-02 23:05 UTC (permalink / raw)
  To: Geert Uytterhoeven, Jean-Michel Hautbois
  Cc: Thorsten Blum, linux-m68k, linux-kernel

The size parameter of strscpy() is optional and specifying the size of
the destination buffer is unnecessary. Remove it to simplify the code.

Signed-off-by: Thorsten Blum <thorsten.blum@linux.dev>
---
 arch/m68k/kernel/setup_mm.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/arch/m68k/kernel/setup_mm.c b/arch/m68k/kernel/setup_mm.c
index 48ce67947678..0fba32552836 100644
--- a/arch/m68k/kernel/setup_mm.c
+++ b/arch/m68k/kernel/setup_mm.c
@@ -147,8 +147,7 @@ static void __init m68k_parse_bootinfo(const struct bi_record *record)
 			break;
 
 		case BI_COMMAND_LINE:
-			strscpy(m68k_command_line, data,
-				sizeof(m68k_command_line));
+			strscpy(m68k_command_line, data);
 			break;
 
 		case BI_RNG_SEED: {
-- 
2.48.1


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH] m68k: mm: Remove size argument when calling strscpy()
  2025-03-02 23:05 [PATCH] m68k: mm: Remove size argument when calling strscpy() Thorsten Blum
@ 2025-03-06 17:41 ` Jean-Michel Hautbois
  2025-03-06 17:44 ` Geert Uytterhoeven
  1 sibling, 0 replies; 9+ messages in thread
From: Jean-Michel Hautbois @ 2025-03-06 17:41 UTC (permalink / raw)
  To: Thorsten Blum, Geert Uytterhoeven; +Cc: linux-m68k, linux-kernel

Hi Thorsten,

Thanks for the patch !

On 03/03/2025 00:05, Thorsten Blum wrote:
> The size parameter of strscpy() is optional and specifying the size of
> the destination buffer is unnecessary. Remove it to simplify the code.
> 
> Signed-off-by: Thorsten Blum <thorsten.blum@linux.dev>

Tested-by: Jean-Michel Hautbois <jeanmichel.hautbois@yoseli.org>

> ---
>   arch/m68k/kernel/setup_mm.c | 3 +--
>   1 file changed, 1 insertion(+), 2 deletions(-)
> 
> diff --git a/arch/m68k/kernel/setup_mm.c b/arch/m68k/kernel/setup_mm.c
> index 48ce67947678..0fba32552836 100644
> --- a/arch/m68k/kernel/setup_mm.c
> +++ b/arch/m68k/kernel/setup_mm.c
> @@ -147,8 +147,7 @@ static void __init m68k_parse_bootinfo(const struct bi_record *record)
>   			break;
>   
>   		case BI_COMMAND_LINE:
> -			strscpy(m68k_command_line, data,
> -				sizeof(m68k_command_line));
> +			strscpy(m68k_command_line, data);
>   			break;
>   
>   		case BI_RNG_SEED: {


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] m68k: mm: Remove size argument when calling strscpy()
  2025-03-02 23:05 [PATCH] m68k: mm: Remove size argument when calling strscpy() Thorsten Blum
  2025-03-06 17:41 ` Jean-Michel Hautbois
@ 2025-03-06 17:44 ` Geert Uytterhoeven
  2025-03-06 23:24   ` Finn Thain
  1 sibling, 1 reply; 9+ messages in thread
From: Geert Uytterhoeven @ 2025-03-06 17:44 UTC (permalink / raw)
  To: Thorsten Blum; +Cc: Jean-Michel Hautbois, linux-m68k, linux-kernel

On Mon, 3 Mar 2025 at 00:07, Thorsten Blum <thorsten.blum@linux.dev> wrote:
> The size parameter of strscpy() is optional and specifying the size of
> the destination buffer is unnecessary. Remove it to simplify the code.
>
> Signed-off-by: Thorsten Blum <thorsten.blum@linux.dev>

Reviewed-by: Geert Uytterhoeven <geert@linux-m68k.org>
i.e. will queue in the m68k tree for v6.15.

Gr{oetje,eeting}s,

                        Geert

-- 
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

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

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] m68k: mm: Remove size argument when calling strscpy()
  2025-03-06 17:44 ` Geert Uytterhoeven
@ 2025-03-06 23:24   ` Finn Thain
  2025-03-07  8:28     ` Geert Uytterhoeven
  2025-03-07  9:15     ` Thorsten Blum
  0 siblings, 2 replies; 9+ messages in thread
From: Finn Thain @ 2025-03-06 23:24 UTC (permalink / raw)
  To: Geert Uytterhoeven
  Cc: Thorsten Blum, Jean-Michel Hautbois, linux-m68k, linux-kernel


On Thu, 6 Mar 2025, Geert Uytterhoeven wrote:

> On Mon, 3 Mar 2025 at 00:07, Thorsten Blum <thorsten.blum@linux.dev> wrote:
> > The size parameter of strscpy() is optional and specifying the size of
> > the destination buffer is unnecessary. Remove it to simplify the code.
> >
> > Signed-off-by: Thorsten Blum <thorsten.blum@linux.dev>
> 
> Reviewed-by: Geert Uytterhoeven <geert@linux-m68k.org>
> i.e. will queue in the m68k tree for v6.15.
> 

The commit message says "simplify the code" which is only true if you 
never scratch the surface (i.e. it's simple code if the reader is simple 
too...)

Commit 30035e45753b ("string: provide strscpy()") was a good idea. It was 
easily auditable. But that's not what we have now.

Patches like this one (which appear across the whole tree) need reviewers 
(lots of them) that know what kind of a bounds check you end up with when 
you ask an arbitary compiler to evaluate this:

sizeof(dst) + __must_be_array(dst) + __must_be_cstr(dst) + __must_be_cstr(src)

Frankly, I can't be sure. But it's a serious question, and not what I'd 
call a "simple" one.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] m68k: mm: Remove size argument when calling strscpy()
  2025-03-06 23:24   ` Finn Thain
@ 2025-03-07  8:28     ` Geert Uytterhoeven
  2025-03-07  8:58       ` Finn Thain
  2025-03-07  9:15     ` Thorsten Blum
  1 sibling, 1 reply; 9+ messages in thread
From: Geert Uytterhoeven @ 2025-03-07  8:28 UTC (permalink / raw)
  To: Finn Thain
  Cc: Thorsten Blum, Jean-Michel Hautbois, linux-m68k, linux-kernel,
	Kees Cook

Hi Finn,

CC Kees

On Fri, 7 Mar 2025 at 00:24, Finn Thain <fthain@linux-m68k.org> wrote:
> On Thu, 6 Mar 2025, Geert Uytterhoeven wrote:
> > On Mon, 3 Mar 2025 at 00:07, Thorsten Blum <thorsten.blum@linux.dev> wrote:
> > > The size parameter of strscpy() is optional and specifying the size of
> > > the destination buffer is unnecessary. Remove it to simplify the code.
> > >
> > > Signed-off-by: Thorsten Blum <thorsten.blum@linux.dev>
> >
> > Reviewed-by: Geert Uytterhoeven <geert@linux-m68k.org>
> > i.e. will queue in the m68k tree for v6.15.
>
> The commit message says "simplify the code" which is only true if you
> never scratch the surface (i.e. it's simple code if the reader is simple
> too...)

The code is simpler in the sense that the API is simpler to use,
and harder to abuse (i.e. to get it wrong).

> Commit 30035e45753b ("string: provide strscpy()") was a good idea. It was
> easily auditable. But that's not what we have now.
>
> Patches like this one (which appear across the whole tree) need reviewers
> (lots of them) that know what kind of a bounds check you end up with when
> you ask an arbitary compiler to evaluate this:
>
> sizeof(dst) + __must_be_array(dst) + __must_be_cstr(dst) + __must_be_cstr(src)
>
> Frankly, I can't be sure. But it's a serious question, and not what I'd
> call a "simple" one.

All the __must_be_*() macros evaluate to zero when true, and cause a
build failure when false.

BTW, Linux does not support being built by an "arbitrary compiler":
only gcc and clang are supported.

Gr{oetje,eeting}s,

                        Geert

-- 
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

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

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] m68k: mm: Remove size argument when calling strscpy()
  2025-03-07  8:28     ` Geert Uytterhoeven
@ 2025-03-07  8:58       ` Finn Thain
  2025-03-07  9:28         ` Geert Uytterhoeven
  0 siblings, 1 reply; 9+ messages in thread
From: Finn Thain @ 2025-03-07  8:58 UTC (permalink / raw)
  To: Geert Uytterhoeven
  Cc: Thorsten Blum, Jean-Michel Hautbois, linux-m68k, linux-kernel,
	Kees Cook


On Fri, 7 Mar 2025, Geert Uytterhoeven wrote:

> On Fri, 7 Mar 2025 at 00:24, Finn Thain <fthain@linux-m68k.org> wrote:
> > On Thu, 6 Mar 2025, Geert Uytterhoeven wrote:
> > > On Mon, 3 Mar 2025 at 00:07, Thorsten Blum <thorsten.blum@linux.dev> wrote:
> > > > The size parameter of strscpy() is optional and specifying the 
> > > > size of the destination buffer is unnecessary. Remove it to 
> > > > simplify the code.
> > > >
> > > > Signed-off-by: Thorsten Blum <thorsten.blum@linux.dev>
> > >
> > > Reviewed-by: Geert Uytterhoeven <geert@linux-m68k.org> i.e. will 
> > > queue in the m68k tree for v6.15.
> >
> > The commit message says "simplify the code" which is only true if you 
> > never scratch the surface (i.e. it's simple code if the reader is 
> > simple too...)
> 
> The code is simpler in the sense that the API is simpler to use, and 
> harder to abuse (i.e. to get it wrong).
> 
> > Commit 30035e45753b ("string: provide strscpy()") was a good idea. It 
> > was easily auditable. But that's not what we have now.
> >
> > Patches like this one (which appear across the whole tree) need 
> > reviewers (lots of them) that know what kind of a bounds check you end 
> > up with when you ask an arbitary compiler to evaluate this:
> >
> > sizeof(dst) + __must_be_array(dst) + __must_be_cstr(dst) + 
> > __must_be_cstr(src)
> >
> > Frankly, I can't be sure. But it's a serious question, and not what 
> > I'd call a "simple" one.
> 
> All the __must_be_*() macros evaluate to zero when true, and cause a 
> build failure when false.
> 

It seems to me that the code review problem could be solved either by not 
churning the whole tree, or if we must have the churn, by short-circuiting 
the recursive search by reviewers for macro definitions.

Can we do something like this?

sizeof(dst) * !!__must_be_array(dst) * !!__must_be_cstr(dst) * !!__must_be_cstr(src)

At first glance multiplication appears to be safe (unlike all the addition 
terms that we have) because the limit of the string copy is either 
unchanged or zeroed.

Yes, I know you said "zero when true". That looks like another design flaw 
to me. But maybe I'm missing something that's more important than 
readability and ease of review.

> BTW, Linux does not support being built by an "arbitrary compiler": only 
> gcc and clang are supported.
> 

So only gcc and clang must agree about all of the details...

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] m68k: mm: Remove size argument when calling strscpy()
  2025-03-06 23:24   ` Finn Thain
  2025-03-07  8:28     ` Geert Uytterhoeven
@ 2025-03-07  9:15     ` Thorsten Blum
  2025-03-07  9:59       ` Finn Thain
  1 sibling, 1 reply; 9+ messages in thread
From: Thorsten Blum @ 2025-03-07  9:15 UTC (permalink / raw)
  To: Finn Thain
  Cc: Geert Uytterhoeven, Jean-Michel Hautbois, linux-m68k,
	linux-kernel

Hi Finn,

On 7. Mar 2025, at 00:24, Finn Thain wrote:
> On Thu, 6 Mar 2025, Geert Uytterhoeven wrote:
>> On Mon, 3 Mar 2025 at 00:07, Thorsten Blum wrote:
>>> The size parameter of strscpy() is optional and specifying the size of
>>> the destination buffer is unnecessary. Remove it to simplify the code.
>>> 
>>> Signed-off-by: Thorsten Blum <thorsten.blum@linux.dev>
>> 
>> Reviewed-by: Geert Uytterhoeven <geert@linux-m68k.org>
>> i.e. will queue in the m68k tree for v6.15.
>> 
> The commit message says "simplify the code" which is only true if you 
> never scratch the surface (i.e. it's simple code if the reader is simple 
> too...)

strscpy() automatically determines the length of the destination buffer
using sizeof() if the size argument is omitted. This makes the explicit
sizeof(m68k_command_line) unnecessary, so removing it shortens the code
without changing its behavior.

Both macro calls expand to the same code, and I find the shorter version
simpler to read (this doesn't mean that strscpy() itself is simple).

> Commit 30035e45753b ("string: provide strscpy()") was a good idea. It was 
> easily auditable. But that's not what we have now.
> 
> Patches like this one (which appear across the whole tree) need reviewers 
> (lots of them) that know what kind of a bounds check you end up with when 
> you ask an arbitary compiler to evaluate this:
> 
> sizeof(dst) + __must_be_array(dst) + __must_be_cstr(dst) + __must_be_cstr(src)
> 
> Frankly, I can't be sure. But it's a serious question, and not what I'd 
> call a "simple" one.

I'm not sure I fully understand this part or how it's related to this
change. This patch doesn't change bounds checking, it just removes an
unnecessary macro argument.

Thanks,
Thorsten


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] m68k: mm: Remove size argument when calling strscpy()
  2025-03-07  8:58       ` Finn Thain
@ 2025-03-07  9:28         ` Geert Uytterhoeven
  0 siblings, 0 replies; 9+ messages in thread
From: Geert Uytterhoeven @ 2025-03-07  9:28 UTC (permalink / raw)
  To: Finn Thain
  Cc: Thorsten Blum, Jean-Michel Hautbois, linux-m68k, linux-kernel,
	Kees Cook

Hi Finn,

On Fri, 7 Mar 2025 at 09:58, Finn Thain <fthain@linux-m68k.org> wrote:
> On Fri, 7 Mar 2025, Geert Uytterhoeven wrote:
> > On Fri, 7 Mar 2025 at 00:24, Finn Thain <fthain@linux-m68k.org> wrote:
> > > On Thu, 6 Mar 2025, Geert Uytterhoeven wrote:
> > > > On Mon, 3 Mar 2025 at 00:07, Thorsten Blum <thorsten.blum@linux.dev> wrote:
> > > > > The size parameter of strscpy() is optional and specifying the
> > > > > size of the destination buffer is unnecessary. Remove it to
> > > > > simplify the code.
> > > > >
> > > > > Signed-off-by: Thorsten Blum <thorsten.blum@linux.dev>
> > > >
> > > > Reviewed-by: Geert Uytterhoeven <geert@linux-m68k.org> i.e. will
> > > > queue in the m68k tree for v6.15.
> > >
> > > The commit message says "simplify the code" which is only true if you
> > > never scratch the surface (i.e. it's simple code if the reader is
> > > simple too...)
> >
> > The code is simpler in the sense that the API is simpler to use, and
> > harder to abuse (i.e. to get it wrong).
> >
> > > Commit 30035e45753b ("string: provide strscpy()") was a good idea. It
> > > was easily auditable. But that's not what we have now.
> > >
> > > Patches like this one (which appear across the whole tree) need
> > > reviewers (lots of them) that know what kind of a bounds check you end
> > > up with when you ask an arbitary compiler to evaluate this:
> > >
> > > sizeof(dst) + __must_be_array(dst) + __must_be_cstr(dst) +
> > > __must_be_cstr(src)
> > >
> > > Frankly, I can't be sure. But it's a serious question, and not what
> > > I'd call a "simple" one.
> >
> > All the __must_be_*() macros evaluate to zero when true, and cause a
> > build failure when false.
>
> It seems to me that the code review problem could be solved either by not
> churning the whole tree, or if we must have the churn, by short-circuiting
> the recursive search by reviewers for macro definitions.
>
> Can we do something like this?
>
> sizeof(dst) * !!__must_be_array(dst) * !!__must_be_cstr(dst) * !!__must_be_cstr(src)

x * !!0 = 0

So either the above should be changed to

    sizeof(dst) * !__must_be_array(dst) * !__must_be_cstr(dst) *
!__must_be_cstr(src)

or all __must_be_*() macros should be changed to invert their return values...

> At first glance multiplication appears to be safe (unlike all the addition
> terms that we have) because the limit of the string copy is either
> unchanged or zeroed.
>
> Yes, I know you said "zero when true". That looks like another design flaw
> to me. But maybe I'm missing something that's more important than
> readability and ease of review.

We had

    #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) +
__must_be_array(arr))

for ages...

Gr{oetje,eeting}s,

                        Geert

-- 
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

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

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] m68k: mm: Remove size argument when calling strscpy()
  2025-03-07  9:15     ` Thorsten Blum
@ 2025-03-07  9:59       ` Finn Thain
  0 siblings, 0 replies; 9+ messages in thread
From: Finn Thain @ 2025-03-07  9:59 UTC (permalink / raw)
  To: Thorsten Blum
  Cc: Geert Uytterhoeven, Jean-Michel Hautbois, linux-m68k,
	linux-kernel


On Fri, 7 Mar 2025, Thorsten Blum wrote:

> it shortens the code without changing its behavior
> 

Is there some limit on the quantity of code in the kernel that could be 
made shorter by the addition of new layers of macros? The only limit I can 
see is the scarcity of skilled code reviewers.

As for code style, I guess I prefer shallow bugs but YMMV.

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2025-03-07  9:59 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-03-02 23:05 [PATCH] m68k: mm: Remove size argument when calling strscpy() Thorsten Blum
2025-03-06 17:41 ` Jean-Michel Hautbois
2025-03-06 17:44 ` Geert Uytterhoeven
2025-03-06 23:24   ` Finn Thain
2025-03-07  8:28     ` Geert Uytterhoeven
2025-03-07  8:58       ` Finn Thain
2025-03-07  9:28         ` Geert Uytterhoeven
2025-03-07  9:15     ` Thorsten Blum
2025-03-07  9:59       ` Finn Thain

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).