All of lore.kernel.org
 help / color / mirror / Atom feed
* 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
       [not found] <202001112058.4xALCb72%lkp@intel.com>
@ 2020-01-13 17:20 ` Nick Desaulniers
  2020-01-13 20:11   ` Tom Zanussi
  0 siblings, 1 reply; 3+ messages in thread
From: Nick Desaulniers @ 2020-01-13 17:20 UTC (permalink / raw)
  To: kbuild-all

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

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).

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/linux-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



-- 
Thanks,
~Nick Desaulniers

^ permalink raw reply	[flat|nested] 3+ messages in thread

* 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
  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
  2020-01-13 20:42     ` Nick Desaulniers
  0 siblings, 1 reply; 3+ messages in thread
From: Tom Zanussi @ 2020-01-13 20:11 UTC (permalink / raw)
  To: kbuild-all

[-- 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
> 
> 
> 

^ permalink raw reply	[flat|nested] 3+ messages in thread

* 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
  2020-01-13 20:11   ` Tom Zanussi
@ 2020-01-13 20:42     ` Nick Desaulniers
  0 siblings, 0 replies; 3+ messages in thread
From: Nick Desaulniers @ 2020-01-13 20:42 UTC (permalink / raw)
  To: kbuild-all

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

On Mon, Jan 13, 2020 at 12:11 PM Tom Zanussi <zanussi@kernel.org> wrote:
>
> 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.

Yep, IIRC, that was the fix in the past for previous occurrences.

-- 
Thanks,
~Nick Desaulniers

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2020-01-13 20:42 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [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
2020-01-13 20:42     ` Nick Desaulniers

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.