All of lore.kernel.org
 help / color / mirror / Atom feed
From: Charlie Jenkins <charlie@rivosinc.com>
To: Alexandre Ghiti <alex@ghiti.fr>
Cc: Steven Rostedt <rostedt@goodmis.org>,
	Masami Hiramatsu <mhiramat@kernel.org>,
	Mark Rutland <mark.rutland@arm.com>,
	Paul Walmsley <paul.walmsley@sifive.com>,
	Palmer Dabbelt <palmer@dabbelt.com>,
	Albert Ou <aou@eecs.berkeley.edu>,
	Oleg Nesterov <oleg@redhat.com>,
	linux-kernel@vger.kernel.org, linux-trace-kernel@vger.kernel.org,
	linux-riscv@lists.infradead.org
Subject: Re: [PATCH] riscv: tracing: Fix __write_overflow_field in ftrace_partial_regs()
Date: Tue, 25 Feb 2025 09:53:27 -0800	[thread overview]
Message-ID: <Z74DlyiSS75MrkqS@ghost> (raw)
In-Reply-To: <b449aacb-f981-4907-af37-1ca5aea83bb4@ghiti.fr>

On Tue, Feb 25, 2025 at 09:36:04AM +0100, Alexandre Ghiti wrote:
> Hi Charlie,
> 
> On 25/02/2025 03:42, Charlie Jenkins wrote:
> > The size of &regs->a0 is unknown, causing the error:
> > 
> > ../include/linux/fortify-string.h:571:25: warning: call to
> > '__write_overflow_field' declared with attribute warning: detected write
> > beyond size of field (1st parameter); maybe use struct_group()?
> > [-Wattribute-warning]
> 
> 
> I can't reproduce this warning with gcc and llvm, even when setting by hand
> -Wattribute-warning when compiling bpf_trace.c (which is the user of
> ftrace_partial_regs()).
> 
> Which toolchain did you use?

You need to have the configs:
CONFIG_BPF_SYSCALL=y
CONFIG_FORTIFY_SOURCE=y
CONFIG_FUNCTION_TRACER=y
CONFIG_FPROBE=y
CONFIG_DYNAMIC_FTRACE=y

I used gcc 14.2.0

- Charlie

> 
> Thanks,
> 
> Alex
> 
> 
> > 
> > Fix this by wrapping the required registers in pt_regs with
> > struct_group() and reference the group when doing the offending
> > memcpy().
> > 
> > Signed-off-by: Charlie Jenkins <charlie@rivosinc.com>
> > ---
> >   arch/riscv/include/asm/ftrace.h |  2 +-
> >   arch/riscv/include/asm/ptrace.h | 18 ++++++++++--------
> >   2 files changed, 11 insertions(+), 9 deletions(-)
> > 
> > diff --git a/arch/riscv/include/asm/ftrace.h b/arch/riscv/include/asm/ftrace.h
> > index c4721ce44ca474654b37b3d51bc0a63d46bc1eff..ec6db1162021fbf4fa48fc87e7984266040aa7d9 100644
> > --- a/arch/riscv/include/asm/ftrace.h
> > +++ b/arch/riscv/include/asm/ftrace.h
> > @@ -207,7 +207,7 @@ ftrace_partial_regs(const struct ftrace_regs *fregs, struct pt_regs *regs)
> >   {
> >   	struct __arch_ftrace_regs *afregs = arch_ftrace_regs(fregs);
> > -	memcpy(&regs->a0, afregs->args, sizeof(afregs->args));
> > +	memcpy(&regs->a_regs, afregs->args, sizeof(afregs->args));
> >   	regs->epc = afregs->epc;
> >   	regs->ra = afregs->ra;
> >   	regs->sp = afregs->sp;
> > diff --git a/arch/riscv/include/asm/ptrace.h b/arch/riscv/include/asm/ptrace.h
> > index b5b0adcc85c18e15c156de11172a5d7f03ada037..2910231977cb71dac3cc42f2dc32590284204057 100644
> > --- a/arch/riscv/include/asm/ptrace.h
> > +++ b/arch/riscv/include/asm/ptrace.h
> > @@ -23,14 +23,16 @@ struct pt_regs {
> >   	unsigned long t2;
> >   	unsigned long s0;
> >   	unsigned long s1;
> > -	unsigned long a0;
> > -	unsigned long a1;
> > -	unsigned long a2;
> > -	unsigned long a3;
> > -	unsigned long a4;
> > -	unsigned long a5;
> > -	unsigned long a6;
> > -	unsigned long a7;
> > +	struct_group(a_regs,
> > +		unsigned long a0;
> > +		unsigned long a1;
> > +		unsigned long a2;
> > +		unsigned long a3;
> > +		unsigned long a4;
> > +		unsigned long a5;
> > +		unsigned long a6;
> > +		unsigned long a7;
> > +	);
> >   	unsigned long s2;
> >   	unsigned long s3;
> >   	unsigned long s4;
> > 
> > ---
> > base-commit: d082ecbc71e9e0bf49883ee4afd435a77a5101b6
> > change-id: 20250224-fix_ftrace_partial_regs-eddaf4a7e5ed

_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv

WARNING: multiple messages have this Message-ID (diff)
From: Charlie Jenkins <charlie@rivosinc.com>
To: Alexandre Ghiti <alex@ghiti.fr>
Cc: Steven Rostedt <rostedt@goodmis.org>,
	Masami Hiramatsu <mhiramat@kernel.org>,
	Mark Rutland <mark.rutland@arm.com>,
	Paul Walmsley <paul.walmsley@sifive.com>,
	Palmer Dabbelt <palmer@dabbelt.com>,
	Albert Ou <aou@eecs.berkeley.edu>,
	Oleg Nesterov <oleg@redhat.com>,
	linux-kernel@vger.kernel.org, linux-trace-kernel@vger.kernel.org,
	linux-riscv@lists.infradead.org
Subject: Re: [PATCH] riscv: tracing: Fix __write_overflow_field in ftrace_partial_regs()
Date: Tue, 25 Feb 2025 09:53:27 -0800	[thread overview]
Message-ID: <Z74DlyiSS75MrkqS@ghost> (raw)
In-Reply-To: <b449aacb-f981-4907-af37-1ca5aea83bb4@ghiti.fr>

On Tue, Feb 25, 2025 at 09:36:04AM +0100, Alexandre Ghiti wrote:
> Hi Charlie,
> 
> On 25/02/2025 03:42, Charlie Jenkins wrote:
> > The size of &regs->a0 is unknown, causing the error:
> > 
> > ../include/linux/fortify-string.h:571:25: warning: call to
> > '__write_overflow_field' declared with attribute warning: detected write
> > beyond size of field (1st parameter); maybe use struct_group()?
> > [-Wattribute-warning]
> 
> 
> I can't reproduce this warning with gcc and llvm, even when setting by hand
> -Wattribute-warning when compiling bpf_trace.c (which is the user of
> ftrace_partial_regs()).
> 
> Which toolchain did you use?

You need to have the configs:
CONFIG_BPF_SYSCALL=y
CONFIG_FORTIFY_SOURCE=y
CONFIG_FUNCTION_TRACER=y
CONFIG_FPROBE=y
CONFIG_DYNAMIC_FTRACE=y

I used gcc 14.2.0

- Charlie

> 
> Thanks,
> 
> Alex
> 
> 
> > 
> > Fix this by wrapping the required registers in pt_regs with
> > struct_group() and reference the group when doing the offending
> > memcpy().
> > 
> > Signed-off-by: Charlie Jenkins <charlie@rivosinc.com>
> > ---
> >   arch/riscv/include/asm/ftrace.h |  2 +-
> >   arch/riscv/include/asm/ptrace.h | 18 ++++++++++--------
> >   2 files changed, 11 insertions(+), 9 deletions(-)
> > 
> > diff --git a/arch/riscv/include/asm/ftrace.h b/arch/riscv/include/asm/ftrace.h
> > index c4721ce44ca474654b37b3d51bc0a63d46bc1eff..ec6db1162021fbf4fa48fc87e7984266040aa7d9 100644
> > --- a/arch/riscv/include/asm/ftrace.h
> > +++ b/arch/riscv/include/asm/ftrace.h
> > @@ -207,7 +207,7 @@ ftrace_partial_regs(const struct ftrace_regs *fregs, struct pt_regs *regs)
> >   {
> >   	struct __arch_ftrace_regs *afregs = arch_ftrace_regs(fregs);
> > -	memcpy(&regs->a0, afregs->args, sizeof(afregs->args));
> > +	memcpy(&regs->a_regs, afregs->args, sizeof(afregs->args));
> >   	regs->epc = afregs->epc;
> >   	regs->ra = afregs->ra;
> >   	regs->sp = afregs->sp;
> > diff --git a/arch/riscv/include/asm/ptrace.h b/arch/riscv/include/asm/ptrace.h
> > index b5b0adcc85c18e15c156de11172a5d7f03ada037..2910231977cb71dac3cc42f2dc32590284204057 100644
> > --- a/arch/riscv/include/asm/ptrace.h
> > +++ b/arch/riscv/include/asm/ptrace.h
> > @@ -23,14 +23,16 @@ struct pt_regs {
> >   	unsigned long t2;
> >   	unsigned long s0;
> >   	unsigned long s1;
> > -	unsigned long a0;
> > -	unsigned long a1;
> > -	unsigned long a2;
> > -	unsigned long a3;
> > -	unsigned long a4;
> > -	unsigned long a5;
> > -	unsigned long a6;
> > -	unsigned long a7;
> > +	struct_group(a_regs,
> > +		unsigned long a0;
> > +		unsigned long a1;
> > +		unsigned long a2;
> > +		unsigned long a3;
> > +		unsigned long a4;
> > +		unsigned long a5;
> > +		unsigned long a6;
> > +		unsigned long a7;
> > +	);
> >   	unsigned long s2;
> >   	unsigned long s3;
> >   	unsigned long s4;
> > 
> > ---
> > base-commit: d082ecbc71e9e0bf49883ee4afd435a77a5101b6
> > change-id: 20250224-fix_ftrace_partial_regs-eddaf4a7e5ed

  reply	other threads:[~2025-02-25 18:40 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-02-25  2:42 [PATCH] riscv: tracing: Fix __write_overflow_field in ftrace_partial_regs() Charlie Jenkins
2025-02-25  2:42 ` Charlie Jenkins
2025-02-25  8:36 ` Alexandre Ghiti
2025-02-25  8:36   ` Alexandre Ghiti
2025-02-25 17:53   ` Charlie Jenkins [this message]
2025-02-25 17:53     ` Charlie Jenkins
2025-02-25 22:55     ` Palmer Dabbelt
2025-02-25 22:55       ` Palmer Dabbelt
2025-02-26  8:50     ` Alexandre Ghiti
2025-02-26  8:50       ` Alexandre Ghiti
2025-03-27  3:25 ` patchwork-bot+linux-riscv
2025-03-27  3:25   ` patchwork-bot+linux-riscv

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=Z74DlyiSS75MrkqS@ghost \
    --to=charlie@rivosinc.com \
    --cc=alex@ghiti.fr \
    --cc=aou@eecs.berkeley.edu \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-riscv@lists.infradead.org \
    --cc=linux-trace-kernel@vger.kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=mhiramat@kernel.org \
    --cc=oleg@redhat.com \
    --cc=palmer@dabbelt.com \
    --cc=paul.walmsley@sifive.com \
    --cc=rostedt@goodmis.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.