diff mbox series

tracing: Fix align of static buffer

Message ID 20201125225654.1618966-1-minchan@kernel.org
State Accepted
Commit 8fa655a3a0013a0c2a2aada6f39a93ee6fc25549
Headers show
Series tracing: Fix align of static buffer | expand

Commit Message

Minchan Kim Nov. 25, 2020, 10:56 p.m. UTC
With 5.9 kernel on ARM64, I found ftrace_dump output was broken but
it had no problem with normal output "cat /sys/kernel/debug/tracing/trace".

With investigation, it seems coping the data into temporal buffer seems to
break the align binary printf expects if the static buffer is not aligned
with 4-byte. IIUC, get_arg in bstr_printf expects that args has already
right align to be decoded and seq_buf_bprintf says ``the arguments are saved
in a 32bit word array that is defined by the format string constraints``.
So if we don't keep the align under copy to temporal buffer, the output
will be broken by shifting some bytes.

This patch fixes it.

Cc: <stable@vger.kernel.org>
Fixes: 8e99cf91b99bb ("tracing: Do not allocate buffer in trace_find_next_entry() in atomic")
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Signed-off-by: Minchan Kim <minchan@kernel.org>
---
 kernel/trace/trace.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Greg KH Nov. 26, 2020, 5:52 a.m. UTC | #1
On Wed, Nov 25, 2020 at 02:56:54PM -0800, Minchan Kim wrote:
> With 5.9 kernel on ARM64, I found ftrace_dump output was broken but
> it had no problem with normal output "cat /sys/kernel/debug/tracing/trace".
> 
> With investigation, it seems coping the data into temporal buffer seems to
> break the align binary printf expects if the static buffer is not aligned
> with 4-byte. IIUC, get_arg in bstr_printf expects that args has already
> right align to be decoded and seq_buf_bprintf says ``the arguments are saved
> in a 32bit word array that is defined by the format string constraints``.
> So if we don't keep the align under copy to temporal buffer, the output
> will be broken by shifting some bytes.
> 
> This patch fixes it.

Does this resolve the issue reported at:
	https://lore.kernel.org/r/20201124223917.795844-1-elavila@google.com
?

thanks,

greg k-h
Youngmin Nam Nov. 26, 2020, 1:04 p.m. UTC | #2
Hi Minchan,

Feel free to add my:

Tested-by: Youngmin Nam <youngmin.nam@samsung.com>
diff mbox series

Patch

diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
index 6a282bbc7e7f..01bfcc345d55 100644
--- a/kernel/trace/trace.c
+++ b/kernel/trace/trace.c
@@ -3534,7 +3534,7 @@  __find_next_entry(struct trace_iterator *iter, int *ent_cpu,
 }
 
 #define STATIC_TEMP_BUF_SIZE	128
-static char static_temp_buf[STATIC_TEMP_BUF_SIZE];
+static char static_temp_buf[STATIC_TEMP_BUF_SIZE] __aligned(4);
 
 /* Find the next real entry, without updating the iterator itself */
 struct trace_entry *trace_find_next_entry(struct trace_iterator *iter,