Re: [PATCH] powerpc/ps3: Fix repository.c build failure

Thorsten Blum <[email protected]>
Newsgroups org.kernel.vger.stable,org.kernel.vger.linux-kernel,org.ozlabs.lists.linuxppc-dev
Message-ID <[email protected]>
On Fri, Jul 31, 2026 at 09:34:28AM +0200, Christophe Leroy (CS GROUP) wrote:
> Le 03/07/2026 à 18:58, Thorsten Blum a écrit :
> > GCC fails to build ps3_defconfig with the following errors:
> > 
> >    arch/powerpc/platforms/ps3/repository.c: In function ‘make_first_field.constprop’:
> >    arch/powerpc/platforms/ps3/repository.c:78:9: error: ‘strnlen’ specified bound 8 exceeds source size 3 [-Werror=stringop-overread]
> >       78 |         memcpy((char *)&n, text, strnlen(text, sizeof(n)));
> >          |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> >    arch/powerpc/platforms/ps3/repository.c: In function ‘make_first_field.constprop’:
> >    arch/powerpc/platforms/ps3/repository.c:78:9: error: ‘strnlen’ specified bound 8 exceeds source size 4 [-Werror=stringop-overread]
> >       78 |         memcpy((char *)&n, text, strnlen(text, sizeof(n)));
> >          |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> > 
> > The current use of strnlen(text, sizeof(n)) triggers -Wstringop-overread
> > when text is a short string literal that is smaller than sizeof(n), such
> > as "bi" or "bus". Use strlen(text) instead and clamp the copy length to
> > sizeof(n) before memcpy().
> > 
> > Drop the redundant char * cast while at it.
> > 
> > Fixes: f94a84a09148 ("powerpc/ps3: refactor strncpy usage")
> > Cc: [email protected]
> > Signed-off-by: Thorsten Blum <[email protected]>
> > ---
> >   arch/powerpc/platforms/ps3/repository.c | 5 ++++-
> >   1 file changed, 4 insertions(+), 1 deletion(-)
> > 
> > diff --git a/arch/powerpc/platforms/ps3/repository.c b/arch/powerpc/platforms/ps3/repository.c
> > index b8c030eab138..0cc755ac3e7f 100644
> > --- a/arch/powerpc/platforms/ps3/repository.c
> > +++ b/arch/powerpc/platforms/ps3/repository.c
> > @@ -6,6 +6,8 @@
> >    *  Copyright 2006 Sony Corp.
> >    */
> > +#include <linux/minmax.h>
> > +
> >   #include <asm/lv1call.h>
> >   #include "platform.h"
> > @@ -74,8 +76,9 @@ static void _dump_node(unsigned int lpar_id, u64 n1, u64 n2, u64 n3, u64 n4,
> >   static u64 make_first_field(const char *text, u64 index)
> >   {
> >   	u64 n = 0;
> > +	size_t len = min(strlen(text), sizeof(n));
> > -	memcpy((char *)&n, text, strnlen(text, sizeof(n)));
> > +	memcpy(&n, text, len);
> >   	return PS3_VENDOR_ID_NONE + (n >> 32) + index;
> >   }
> 
> Maybe change to u32 and remove the n >> 32.
> 
> Shouldn't the same fix be done in make_field() ?

make_field() has two callers where the compiler can't infer the size
of the string at compile time, so it doesn't produce this error.

make_first_field() is called only with constant strings, which lets the
compiler infer that all string lengths are less than 8 bytes.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.