From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932262AbcF3O4j (ORCPT ); Thu, 30 Jun 2016 10:56:39 -0400 Received: from mx1.redhat.com ([209.132.183.28]:56326 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751840AbcF3O4i (ORCPT ); Thu, 30 Jun 2016 10:56:38 -0400 Date: Thu, 30 Jun 2016 16:56:34 +0200 From: Jiri Olsa To: Steven Rostedt Cc: linux-kernel@vger.kernel.org, Andrew Morton , Rasmus Villemoes , Frederic Weisbecker , Andy Shevchenko , Jiri Olsa Subject: Re: [RFC][PATCH 3/3] vsprintf: Add support for %pb and friends to vbin_printf() Message-ID: <20160630145634.GA2992@krava> References: <20160629200522.686965980@goodmis.org> <20160629201224.718341351@goodmis.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20160629201224.718341351@goodmis.org> User-Agent: Mutt/1.6.1 (2016-04-27) X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.32]); Thu, 30 Jun 2016 14:56:38 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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':