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(-)
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,
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
Hi Greg,
On Thu, Nov 26, 2020 at 2:52 PM Greg KH gregkh@linuxfoundation.org wrote:
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 ?
No, it's a different issue.
Thanks, Namhyung
On Thu, Nov 26, 2020 at 10:04:28PM +0900, Youngmin Nam wrote:
Hi Minchan,
Feel free to add my:
Tested-by: Youngmin Nam youngmin.nam@samsung.com
Thanks for the testing, Youngmin!
linux-stable-mirror@lists.linaro.org