On Wed, Jun 29, 2016 at 04:05:25PM -0400, Steven Rostedt wrote: SNIP
> } > @@ -2552,11 +2561,18 @@ int bstr_printf(char *buf, size_t size, const char > *fmt, const u32 *bin_buf) > } > > case FORMAT_TYPE_PTR: { > + unsigned long *tmp_ptr; > + unsigned long *ptr; > const char *_fmt = fmt; > char tmp_fmt[2]; > > if (supported_bin_ptr(fmt)) { > switch (fmt[0]) { > + case 'b': { > + tmp_ptr = get_arg(void *); > + ptr = (void *)&tmp_ptr; this seems wrong.. &tmp_ptr is address from the stack not from args which is what we want in here IIUC should we do something like in attached patch? untested.. thanks, jirka --- diff --git a/lib/vsprintf.c b/lib/vsprintf.c index 474d9ddaca6f..9aeb277ae533 100644 --- a/lib/vsprintf.c +++ b/lib/vsprintf.c @@ -2561,7 +2561,6 @@ int bstr_printf(char *buf, size_t size, const char *fmt, const u32 *bin_buf) } case FORMAT_TYPE_PTR: { - unsigned long *tmp_ptr; unsigned long *ptr; const char *_fmt = fmt; char tmp_fmt[2]; @@ -2569,8 +2568,8 @@ int bstr_printf(char *buf, size_t size, const char *fmt, const u32 *bin_buf) if (supported_bin_ptr(fmt)) { switch (fmt[0]) { case 'b': { - tmp_ptr = get_arg(void *); - ptr = (void *)&tmp_ptr; + ptr = (unsigned long *) PTR_ALIGN(args, sizeof(u32)); + args += BITS_TO_LONGS(spec.field_width); break; } case 'F':