All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tom Zanussi <zanussi@kernel.org>
To: kbuild-all@lists.01.org
Subject: Re: [zanussi-trace:ftrace/synth-event-gen-v2 10/12] kernel/trace/trace_kprobe.c:974:17: warning: passing an object that undergoes default argument promotion to 'va_start' has undefined behavior
Date: Mon, 13 Jan 2020 14:11:07 -0600	[thread overview]
Message-ID: <1578946267.31031.8.camel@kernel.org> (raw)
In-Reply-To: <CAKwvOdmQovj9tDQ=MsAmNU_ghGqVnS9hAUNSWo_y2ACbhm8sZw@mail.gmail.com>

[-- Attachment #1: Type: text/plain, Size: 5594 bytes --]

Hi Nick,

On Mon, 2020-01-13 at 09:20 -0800, Nick Desaulniers wrote:
> Hi Tom,
> Below is a report from a 0day bot build w/ Clang, can you please take
> a look? (Apologies if this has been previously reported).  In the
> past, -Wvarargs warnings are usually related to the last parameter of
> a va_arg function undergoing implicit promotion (which is explicitly
> UB, IIRC).
> 

OK, looks like just changing the param order should fix it, thanks for
the report.

Tom

> On Sat, Jan 11, 2020 at 4:35 AM kbuild test robot <lkp@intel.com>
> wrote:
> > 
> > CC: kbuild-all(a)lists.01.org
> > TO: Tom Zanussi <zanussi@kernel.org>
> > 
> > tree:   https://git.kernel.org/pub/scm/linux/kernel/git/zanussi/lin
> > ux-trace.git ftrace/synth-event-gen-v2
> > head:   91ee64186d5894724e276c4e7fad70446d7a02a7
> > commit: 5f052546541d6cc5ad00e28aca6376c221db5c7e [10/12] tracing:
> > Add kprobe event command generation functions
> > config: x86_64-defconfig (attached as .config)
> > compiler: clang version 10.0.0 (git://gitmirror/llvm_project
> > 016bf03ef6fcd9dce43b0c17971f76323f07a684)
> > reproduce:
> >         git checkout 5f052546541d6cc5ad00e28aca6376c221db5c7e
> >         # save the attached .config to linux build tree
> >         make ARCH=x86_64
> > 
> > If you fix the issue, kindly add following tag
> > Reported-by: kbuild test robot <lkp@intel.com>
> > 
> > All warnings (new ones prefixed by >>):
> > 
> > > > kernel/trace/trace_kprobe.c:974:17: warning: passing an object
> > > > that undergoes default argument promotion to 'va_start' has
> > > > undefined behavior [-Wvarargs]
> > 
> >            va_start(args, kretprobe);
> >                           ^
> >    kernel/trace/trace_kprobe.c:947:30: note: parameter of type
> > 'bool' (aka '_Bool') is declared here
> >                         const char *loc, bool kretprobe, ...)
> >                                               ^
> >    1 warning generated.
> > 
> > vim +/va_start +974 kernel/trace/trace_kprobe.c
> > 
> >    925
> >    926  /**
> >    927   * __gen_kprobe_cmd - Generate a synthetic event command
> > from arg list
> >    928   * @cmd: A pointer to the dynevent_cmd struct representing
> > the new event
> >    929   * @name: The name of the kprobe event
> >    930   * @loc: The location of the kprobe event
> >    931   * @kretprobe: Is this a return probe?
> >    932   * @args: Variable number of arg (pairs), one pair for each
> > field
> >    933   *
> >    934   * NOTE: Users normally won't want to call this function
> > directly, but
> >    935   * rather use the gen_kprobe_cmd() wrapper, which
> > automatically adds a
> >    936   * NULL to the end of the arg list.  If this function is
> > used
> >    937   * directly, make suer he last arg in the variable arg list
> > is NULL.
> >    938   *
> >    939   * Generate a kprobe event command to be executed by
> >    940   * create_dynevent().  This function can be used to
> > generate the
> >    941   * complete command or only the first part of it; in the
> > latter case,
> >    942   * add_probe_fields() can be used to add more fields
> > following this.
> >    943   *
> >    944   * Return: 0 if successful, error otherwise.
> >    945   */
> >    946  int __gen_kprobe_cmd(struct dynevent_cmd *cmd, const char
> > *name,
> >    947                       const char *loc, bool kretprobe, ...)
> >    948  {
> >    949          char buf[MAX_EVENT_NAME_LEN];
> >    950          struct dynevent_arg arg;
> >    951          va_list args;
> >    952          int ret;
> >    953
> >    954          if (cmd->type != DYNEVENT_TYPE_KPROBE)
> >    955                  return -EINVAL;
> >    956
> >    957          if (kretprobe)
> >    958                  snprintf(buf, MAX_EVENT_NAME_LEN, "r:%s",
> > name);
> >    959          else
> >    960                  snprintf(buf, MAX_EVENT_NAME_LEN, "p:%s",
> > name);
> >    961
> >    962          dynevent_arg_init(&arg, NULL, 0);
> >    963          arg.str = buf;
> >    964          ret = add_dynevent_arg(cmd, &arg);
> >    965          if (ret)
> >    966                  return ret;
> >    967
> >    968          dynevent_arg_init(&arg, NULL, 0);
> >    969          arg.str = loc;
> >    970          ret = add_dynevent_arg(cmd, &arg);
> >    971          if (ret)
> >    972                  return ret;
> >    973
> >  > 974          va_start(args, kretprobe);
> >    975          for (;;) {
> >    976                  const char *field;
> >    977
> >    978                  field = va_arg(args, const char *);
> >    979                  if (!field)
> >    980                          break;
> >    981
> >    982                  if (++cmd->n_fields > MAX_TRACE_ARGS) {
> >    983                          ret = -EINVAL;
> >    984                          break;
> >    985                  }
> >    986
> >    987                  dynevent_arg_init(&arg, NULL, 0);
> >    988                  arg.str = field;
> >    989                  ret = add_dynevent_arg(cmd, &arg);
> >    990                  if (ret)
> >    991                          break;
> >    992          }
> >    993          va_end(args);
> >    994
> >    995          return ret;
> >    996  }
> >    997  EXPORT_SYMBOL_GPL(__gen_kprobe_cmd);
> >    998
> > 
> > ---
> > 0-DAY kernel test infrastructure                 Open Source
> > Technology Center
> > https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org Intel
> > Corporation
> 
> 
> 

  reply	other threads:[~2020-01-13 20:11 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <202001112058.4xALCb72%lkp@intel.com>
2020-01-13 17:20 ` [zanussi-trace:ftrace/synth-event-gen-v2 10/12] kernel/trace/trace_kprobe.c:974:17: warning: passing an object that undergoes default argument promotion to 'va_start' has undefined behavior Nick Desaulniers
2020-01-13 20:11   ` Tom Zanussi [this message]
2020-01-13 20:42     ` Nick Desaulniers

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=1578946267.31031.8.camel@kernel.org \
    --to=zanussi@kernel.org \
    --cc=kbuild-all@lists.01.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.