All of lore.kernel.org
 help / color / mirror / Atom feed
From: Arnaldo Carvalho de Melo <acme@infradead.org>
To: Stephane Eranian <eranian@google.com>
Cc: linux-kernel@vger.kernel.org, peterz@infradead.org,
	mingo@elte.hu, paulus@samba.org, davem@davemloft.net,
	fweisbec@gmail.com, perfmon2-devel@lists.sf.net,
	eranian@gmail.com
Subject: Re: [PATCH] perf: fix bug mismatch with -c option definition
Date: Mon, 17 May 2010 11:19:10 -0300	[thread overview]
Message-ID: <20100517141910.GA14367@ghostprotocols.net> (raw)
In-Reply-To: <4bf11ae9.e88cd80a.06b0.ffffa8e3@mx.google.com>

Em Mon, May 17, 2010 at 12:04:01PM +0200, Stephane Eranian escreveu:
>   The -c option defines the user requested sampling period. It was implemented
>   using an unsigned int variable but the type of the option was OPT_LONG. Thus,
>   the option parser was overwriting memory belonging to other variables, namely
>   the mmap_pages leading to a zero page sampling buffer. The bug was exposed
>   only when compiling at -O0, probably because the compiler was padding
>   variables at higher optimization levels.

Well spotted!
 
>   This patch fixes this problem by declaring user_interval as u64. This also
>   avoids wrap-around issues for large period on 32-bit systems.
>  
>   Signed-off-by: Stephane Eranian <eranian@google.com>
> --
>  tools/perf/builtin-record.c |    8 ++++----
>  1 file changed, 4 insertions(+), 4 deletions(-)
> 
> diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c
> index 0f467cf..78f64cc 100644
> --- a/tools/perf/builtin-record.c
> +++ b/tools/perf/builtin-record.c
> @@ -33,8 +33,8 @@ enum write_mode_t {
>  
>  static int			*fd[MAX_NR_CPUS][MAX_COUNTERS];
>  
> -static unsigned int		user_interval 			= UINT_MAX;
> -static long			default_interval		=      0;
> +static u64			user_interval			= ULLONG_MAX;
> +static u64			default_interval		=      0;

The parsing code uses this for OPT_LONG:

        case OPTION_LONG:
                if (unset) {
                        *(long *)opt->value = 0;
                        return 0;
                }
                if (opt->flags & PARSE_OPT_OPTARG && !p->opt) {
                        *(long *)opt->value = opt->defval;
                        return 0;
                }
                if (get_arg(p, opt, flags, &arg))
                        return -1;
                *(long *)opt->value = strtol(arg, (char **)&s, 10);

So I think we should augment the parsing code to have OPTION_ULONG, and,
for handling u64, OPTION_ULLONG.

I'll add that and then modify your patch to use it.

- Arnaldo

  parent reply	other threads:[~2010-05-17 14:19 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-05-17 10:04 [PATCH] perf: fix bug mismatch with -c option definition Stephane Eranian
2010-05-17 11:29 ` Frederic Weisbecker
2010-05-17 14:19 ` Arnaldo Carvalho de Melo [this message]
2010-05-17 15:39   ` Stephane Eranian

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=20100517141910.GA14367@ghostprotocols.net \
    --to=acme@infradead.org \
    --cc=davem@davemloft.net \
    --cc=eranian@gmail.com \
    --cc=eranian@google.com \
    --cc=fweisbec@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=paulus@samba.org \
    --cc=perfmon2-devel@lists.sf.net \
    --cc=peterz@infradead.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.