LinuxPPC-Dev Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Petr Mladek <pmladek@suse.com>
To: Bagas Sanjaya <bagasdotme@gmail.com>
Cc: John Ogness <john.ogness@linutronix.de>,
	linux-kernel@vger.kernel.org,
	Steven Rostedt <rostedt@goodmis.org>,
	David Howells <dhowells@redhat.com>,
	Sergey Senozhatsky <senozhatsky@chromium.org>,
	Jordan Niethe <jniethe5@gmail.com>,
	Paul Mackerras <paulus@samba.org>,
	linuxppc-dev@lists.ozlabs.org
Subject: Re: dangling pointer to '__str' error on ppc64_defconfig, GCC 12.1.0
Date: Thu, 26 May 2022 15:19:57 +0200	[thread overview]
Message-ID: <Yo9+fQ32Br9+NpUW@alley> (raw)
In-Reply-To: <Yo9Fm/hdtac1t9sW@debian.me>

On Thu 2022-05-26 16:17:15, Bagas Sanjaya wrote:
> Hi everyone,
> 
> Attempting to build ppc64_defconfig kernel with powerpc64-unknown-linux-gnu
> (GCC 12.1.0) on v5.18, I got build error on ftrace.o:
> 
>   CC      arch/powerpc/kernel/trace/ftrace.o
>   CC      init/init_task.o
> In file included from ./include/asm-generic/bug.h:22,
>                  from ./arch/powerpc/include/asm/bug.h:156,
>                  from ./include/linux/bug.h:5,
>                  from ./include/linux/thread_info.h:13,
>                  from ./include/asm-generic/preempt.h:5,
>                  from ./arch/powerpc/include/generated/asm/preempt.h:1,
>                  from ./include/linux/preempt.h:78,
>                  from ./include/linux/spinlock.h:55,
>                  from arch/powerpc/kernel/trace/ftrace.c:16:
> arch/powerpc/kernel/trace/ftrace.c: In function 'ftrace_modify_code':
> ./include/linux/printk.h:446:44: error: using a dangling pointer to '__str' [-Werror=dangling-pointer=]
>   446 | #define printk(fmt, ...) printk_index_wrap(_printk, fmt, ##__VA_ARGS__)
>       |                                            ^
> ./include/linux/printk.h:418:17: note: in definition of macro 'printk_index_wrap'
>   418 |                 _p_func(_fmt, ##__VA_ARGS__);                           \
>       |                 ^~~~~~~
> ./include/linux/printk.h:489:9: note: in expansion of macro 'printk'
>   489 |         printk(KERN_ERR pr_fmt(fmt), ##__VA_ARGS__)
>       |         ^~~~~~
> arch/powerpc/kernel/trace/ftrace.c:75:17: note: in expansion of macro 'pr_err'
>    75 |                 pr_err("%p: replaced (%s) != old (%s)",
>       |                 ^~~~~~
> In file included from ./arch/powerpc/include/asm/code-patching.h:14,
>                  from arch/powerpc/kernel/trace/ftrace.c:26:
> ./arch/powerpc/include/asm/inst.h:156:14: note: '__str' declared here
>   156 |         char __str[PPC_INST_STR_LEN];   \
>       |              ^~~~~

IMHO, the problem is in the macro:

#define ppc_inst_as_str(x)		\
({					\
	char __str[PPC_INST_STR_LEN];	\
	__ppc_inst_as_str(__str, x);	\
	__str;				\
})

The buffer __str is defined inside the code block {} and
the macro passes the pointer to the buffer outside.
IMHO, from the compiler POV, the buffer does not exist
outside of the code block.

The macro was added by the commit 50428fdc53ba48f6936b10dfd ("powerpc:
Add a ppc_inst_as_str() helper").

Adding Jordan Niethe into Cc.

Best Regards,
Petr


> ./include/linux/printk.h:418:33: note: in expansion of macro 'ppc_inst_as_str'
>   418 |                 _p_func(_fmt, ##__VA_ARGS__);                           \
>       |                                 ^~~~~~~~~~~
> ./include/linux/printk.h:446:26: note: in expansion of macro 'printk_index_wrap'
>   446 | #define printk(fmt, ...) printk_index_wrap(_printk, fmt, ##__VA_ARGS__)
>       |                          ^~~~~~~~~~~~~~~~~
> ./include/linux/printk.h:489:9: note: in expansion of macro 'printk'
>   489 |         printk(KERN_ERR pr_fmt(fmt), ##__VA_ARGS__)
>       |         ^~~~~~
> arch/powerpc/kernel/trace/ftrace.c:75:17: note: in expansion of macro 'pr_err'
>    75 |                 pr_err("%p: replaced (%s) != old (%s)",
>       |                 ^~~~~~
> arch/powerpc/kernel/trace/ftrace.c: In function '__ftrace_make_nop_kernel':
> ./include/linux/printk.h:446:44: error: using a dangling pointer to '__str' [-Werror=dangling-pointer=]
>   446 | #define printk(fmt, ...) printk_index_wrap(_printk, fmt, ##__VA_ARGS__)
>       |                                            ^
> ./include/linux/printk.h:418:17: note: in definition of macro 'printk_index_wrap'
>   418 |                 _p_func(_fmt, ##__VA_ARGS__);                           \
>       |                 ^~~~~~~
> ./include/linux/printk.h:489:9: note: in expansion of macro 'printk'
>   489 |         printk(KERN_ERR pr_fmt(fmt), ##__VA_ARGS__)
>       |         ^~~~~~
> arch/powerpc/kernel/trace/ftrace.c:379:17: note: in expansion of macro 'pr_err'
>   379 |                 pr_err("Not expected bl: opcode is %s\n", ppc_inst_as_str(op));
>       |                 ^~~~~~
> ./arch/powerpc/include/asm/inst.h:156:14: note: '__str' declared here
>   156 |         char __str[PPC_INST_STR_LEN];   \
>       |              ^~~~~
> ./include/linux/printk.h:418:33: note: in expansion of macro 'ppc_inst_as_str'
>   418 |                 _p_func(_fmt, ##__VA_ARGS__);                           \
>       |                                 ^~~~~~~~~~~
> ./include/linux/printk.h:446:26: note: in expansion of macro 'printk_index_wrap'
>   446 | #define printk(fmt, ...) printk_index_wrap(_printk, fmt, ##__VA_ARGS__)
>       |                          ^~~~~~~~~~~~~~~~~
> ./include/linux/printk.h:489:9: note: in expansion of macro 'printk'
>   489 |         printk(KERN_ERR pr_fmt(fmt), ##__VA_ARGS__)
>       |         ^~~~~~
> arch/powerpc/kernel/trace/ftrace.c:379:17: note: in expansion of macro 'pr_err'
>   379 |                 pr_err("Not expected bl: opcode is %s\n", ppc_inst_as_str(op));
>       |                 ^~~~~~
> arch/powerpc/kernel/trace/ftrace.c: In function '__ftrace_make_call_kernel':
> ./include/linux/printk.h:446:44: error: using a dangling pointer to '__str' [-Werror=dangling-pointer=]
>   446 | #define printk(fmt, ...) printk_index_wrap(_printk, fmt, ##__VA_ARGS__)
>       |                                            ^
> ./include/linux/printk.h:418:17: note: in definition of macro 'printk_index_wrap'
>   418 |                 _p_func(_fmt, ##__VA_ARGS__);                           \
>       |                 ^~~~~~~
> ./include/linux/printk.h:489:9: note: in expansion of macro 'printk'
>   489 |         printk(KERN_ERR pr_fmt(fmt), ##__VA_ARGS__)
>       |         ^~~~~~
> arch/powerpc/kernel/trace/ftrace.c:638:17: note: in expansion of macro 'pr_err'
>   638 |                 pr_err("Unexpected call sequence at %p: %s\n", ip, ppc_inst_as_str(op));
>       |                 ^~~~~~
> ./arch/powerpc/include/asm/inst.h:156:14: note: '__str' declared here
>   156 |         char __str[PPC_INST_STR_LEN];   \
>       |              ^~~~~
> ./include/linux/printk.h:418:33: note: in expansion of macro 'ppc_inst_as_str'
>   418 |                 _p_func(_fmt, ##__VA_ARGS__);                           \
>       |                                 ^~~~~~~~~~~
> ./include/linux/printk.h:446:26: note: in expansion of macro 'printk_index_wrap'
>   446 | #define printk(fmt, ...) printk_index_wrap(_printk, fmt, ##__VA_ARGS__)
>       |                          ^~~~~~~~~~~~~~~~~
> ./include/linux/printk.h:489:9: note: in expansion of macro 'printk'
>   489 |         printk(KERN_ERR pr_fmt(fmt), ##__VA_ARGS__)
>       |         ^~~~~~
> arch/powerpc/kernel/trace/ftrace.c:638:17: note: in expansion of macro 'pr_err'
>   638 |                 pr_err("Unexpected call sequence at %p: %s\n", ip, ppc_inst_as_str(op));
>       |                 ^~~~~~
> arch/powerpc/kernel/trace/ftrace.c: In function '__ftrace_make_nop':
> ./include/linux/printk.h:446:44: error: using a dangling pointer to '__str' [-Werror=dangling-pointer=]
>   446 | #define printk(fmt, ...) printk_index_wrap(_printk, fmt, ##__VA_ARGS__)
>       |                                            ^
> ./include/linux/printk.h:418:17: note: in definition of macro 'printk_index_wrap'
>   418 |                 _p_func(_fmt, ##__VA_ARGS__);                           \
>       |                 ^~~~~~~
> ./include/linux/printk.h:489:9: note: in expansion of macro 'printk'
>   489 |         printk(KERN_ERR pr_fmt(fmt), ##__VA_ARGS__)
>       |         ^~~~~~
> arch/powerpc/kernel/trace/ftrace.c:205:17: note: in expansion of macro 'pr_err'
>   205 |                 pr_err("Expected %08lx found %s\n", PPC_INST_LD_TOC, ppc_inst_as_str(op));
>       |                 ^~~~~~
> ./arch/powerpc/include/asm/inst.h:156:14: note: '__str' declared here
>   156 |         char __str[PPC_INST_STR_LEN];   \
>       |              ^~~~~
> ./include/linux/printk.h:418:33: note: in expansion of macro 'ppc_inst_as_str'
>   418 |                 _p_func(_fmt, ##__VA_ARGS__);                           \
>       |                                 ^~~~~~~~~~~
> ./include/linux/printk.h:446:26: note: in expansion of macro 'printk_index_wrap'
>   446 | #define printk(fmt, ...) printk_index_wrap(_printk, fmt, ##__VA_ARGS__)
>       |                          ^~~~~~~~~~~~~~~~~
> ./include/linux/printk.h:489:9: note: in expansion of macro 'printk'
>   489 |         printk(KERN_ERR pr_fmt(fmt), ##__VA_ARGS__)
>       |         ^~~~~~
> arch/powerpc/kernel/trace/ftrace.c:205:17: note: in expansion of macro 'pr_err'
>   205 |                 pr_err("Expected %08lx found %s\n", PPC_INST_LD_TOC, ppc_inst_as_str(op));
>       |                 ^~~~~~
> ./include/linux/printk.h:446:44: error: using a dangling pointer to '__str' [-Werror=dangling-pointer=]
>   446 | #define printk(fmt, ...) printk_index_wrap(_printk, fmt, ##__VA_ARGS__)
>       |                                            ^
> ./include/linux/printk.h:418:17: note: in definition of macro 'printk_index_wrap'
>   418 |                 _p_func(_fmt, ##__VA_ARGS__);                           \
>       |                 ^~~~~~~
> ./include/linux/printk.h:489:9: note: in expansion of macro 'printk'
>   489 |         printk(KERN_ERR pr_fmt(fmt), ##__VA_ARGS__)
>       |         ^~~~~~
> arch/powerpc/kernel/trace/ftrace.c:139:17: note: in expansion of macro 'pr_err'
>   139 |                 pr_err("Not expected bl: opcode is %s\n", ppc_inst_as_str(op));
>       |                 ^~~~~~
> ./arch/powerpc/include/asm/inst.h:156:14: note: '__str' declared here
>   156 |         char __str[PPC_INST_STR_LEN];   \
>       |              ^~~~~
> ./include/linux/printk.h:418:33: note: in expansion of macro 'ppc_inst_as_str'
>   418 |                 _p_func(_fmt, ##__VA_ARGS__);                           \
>       |                                 ^~~~~~~~~~~
> ./include/linux/printk.h:446:26: note: in expansion of macro 'printk_index_wrap'
>   446 | #define printk(fmt, ...) printk_index_wrap(_printk, fmt, ##__VA_ARGS__)
>       |                          ^~~~~~~~~~~~~~~~~
> ./include/linux/printk.h:489:9: note: in expansion of macro 'printk'
>   489 |         printk(KERN_ERR pr_fmt(fmt), ##__VA_ARGS__)
>       |         ^~~~~~
> arch/powerpc/kernel/trace/ftrace.c:139:17: note: in expansion of macro 'pr_err'
>   139 |                 pr_err("Not expected bl: opcode is %s\n", ppc_inst_as_str(op));
>       |                 ^~~~~~
> arch/powerpc/kernel/trace/ftrace.c: In function '__ftrace_make_call':
> ./include/linux/printk.h:446:44: error: using a dangling pointer to '__str' [-Werror=dangling-pointer=]
>   446 | #define printk(fmt, ...) printk_index_wrap(_printk, fmt, ##__VA_ARGS__)
>       |                                            ^
> ./include/linux/printk.h:418:17: note: in definition of macro 'printk_index_wrap'
>   418 |                 _p_func(_fmt, ##__VA_ARGS__);                           \
>       |                 ^~~~~~~
> ./include/linux/printk.h:489:9: note: in expansion of macro 'printk'
>   489 |         printk(KERN_ERR pr_fmt(fmt), ##__VA_ARGS__)
>       |         ^~~~~~
> arch/powerpc/kernel/trace/ftrace.c:506:17: note: in expansion of macro 'pr_err'
>   506 |                 pr_err("Unexpected call sequence at %p: %s %s\n",
>       |                 ^~~~~~
> ./arch/powerpc/include/asm/inst.h:156:14: note: '__str' declared here
>   156 |         char __str[PPC_INST_STR_LEN];   \
>       |              ^~~~~
> ./include/linux/printk.h:418:33: note: in expansion of macro 'ppc_inst_as_str'
>   418 |                 _p_func(_fmt, ##__VA_ARGS__);                           \
>       |                                 ^~~~~~~~~~~
> ./include/linux/printk.h:446:26: note: in expansion of macro 'printk_index_wrap'
>   446 | #define printk(fmt, ...) printk_index_wrap(_printk, fmt, ##__VA_ARGS__)
>       |                          ^~~~~~~~~~~~~~~~~
> ./include/linux/printk.h:489:9: note: in expansion of macro 'printk'
>   489 |         printk(KERN_ERR pr_fmt(fmt), ##__VA_ARGS__)
>       |         ^~~~~~
> arch/powerpc/kernel/trace/ftrace.c:506:17: note: in expansion of macro 'pr_err'
>   506 |                 pr_err("Unexpected call sequence at %p: %s %s\n",
>       |                 ^~~~~~
> cc1: all warnings being treated as errors
> make[3]: *** [scripts/Makefile.build:288: arch/powerpc/kernel/trace/ftrace.o] Error 1
> 
> I also hit this error on current master (commit babf0bb978e3c9
> ("Merge tag 'xfs-5.19-for-linus' of git://git.kernel.org/pub/scm/fs/xfs/xfs-linux")).
> 
> Thanks.
> 
> Reported-by: Bagas Sanjaya <bagasdotme@gmail.com>
> 
> -- 
> An old man doll... just what I always wanted! - Clara

  reply	other threads:[~2022-05-26 13:20 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-05-26  9:17 dangling pointer to '__str' error on ppc64_defconfig, GCC 12.1.0 Bagas Sanjaya
2022-05-26 13:19 ` Petr Mladek [this message]
2022-05-30 10:53   ` Michael Ellerman

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=Yo9+fQ32Br9+NpUW@alley \
    --to=pmladek@suse.com \
    --cc=bagasdotme@gmail.com \
    --cc=dhowells@redhat.com \
    --cc=jniethe5@gmail.com \
    --cc=john.ogness@linutronix.de \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=paulus@samba.org \
    --cc=rostedt@goodmis.org \
    --cc=senozhatsky@chromium.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox