Re: [perfmon2] Some printf statements in libpfm need to be tweaked
Status: Beta
Brought to you by:
seranian
|
From: Stephane E. <er...@go...> - 2023-07-06 16:04:10
|
Hi Will,
Patch applied.
Thanks.
On Fri, Jun 30, 2023 at 12:18 PM William Cohen <wc...@re...> wrote:
> Hi,
> I was looking through the static analysis results of libpfm and there were
> a number of printf statements that are not quite right. One has too many
> arguments and others are missing arguments. Attached is a patch that
> addresses the following errors in a way that looked reasonable based on
> what what was observed in the code
>
> -Will
>
>
> For the following extra arg one e->fstr is printed on a later line, so I
> suspect that the line 87 should just be printing the "]".
>
> Error: PRINTF_ARGS (CWE-685): [#def66]
> libpfm-4.13.0/lib/pfmlib_intel_x86.c:87: extra_argument: This argument was
> not used by the format string: "e->fstr".
> # 85| __pfm_vbprintf(" any=%d", reg.sel_anythr);
> # 86|
> # 87|-> __pfm_vbprintf("]", e->fstr);
> # 88|
> # 89| for (i = 1 ; i < e->count; i++)
>
>
> Below are ones with missing arguments.
>
> Suspect for the 'DPRINT("%s: ...' ones that the "s: " should be removed
> based on other DPRINT examples in the code.
>
> Error: PRINTF_ARGS (CWE-685): [#def11]
> libpfm-4.13.0/lib/pfmlib_amd64_perf_event.c:78: missing_argument: No
> argument for format specifier "%d".
> # 76|
> # 77| if (e->count > 1) {
> # 78|-> DPRINT("%s: unsupported count=%d\n", e->count);
> # 79| return PFM_ERR_NOTSUPP;
> # 80| }
>
> Following should be printing the name of the pmu, so that should be %s and
> printing out p->name.
>
> Error: PRINTF_ARGS (CWE-685): [#def14]
> libpfm-4.13.0/lib/pfmlib_common.c:1151: missing_argument: No argument for
> format specifier "%d".
> # 1149|
> # 1150| if (pfmlib_is_blacklisted_pmu(p)) {
> # 1151|-> DPRINT("%d PMU blacklisted, skipping
> initialization\n");
> # 1152| continue;
> # 1153| }
>
> Looking through the code probably meaning to print out variable str.
>
> Error: PRINTF_ARGS (CWE-685): [#def15]
> libpfm-4.13.0/lib/pfmlib_common.c:1367: missing_argument: No argument for
> format specifier "%s".
> # 1365| ainfo->equiv= NULL;
> # 1366| if (*endptr) {
> # 1367|-> DPRINT("raw umask (%s) is not a
> number\n");
> # 1368| return PFM_ERR_ATTR;
> # 1369|
>
> Following looks like it is printing state twice.
>
> Error: PRINTF_ARGS (CWE-685): [#def34]
> libpfm-4.13.0/lib/pfmlib_intel_skx_unc_cha.c:60: missing_argument: No
> argument for format specifier "%x".
> # 58| f.val = e->codes[1];
> # 59|
> # 60|-> __pfm_vbprintf("[UNC_CHA_FILTER0=0x%"PRIx64" thread_id=%d
> source=0x%x state=0x%x"
> # 61| " state=0x%x]\n",
> # 62| f.val,
>
> Suspect for the 'DPRINT("%s: ...' ones that the "s: " should be removed
> based on other DPRINT examples in the code.
>
> Error: PRINTF_ARGS (CWE-685): [#def83]
> libpfm-4.13.0/lib/pfmlib_intel_x86_perf_event.c:100: missing_argument: No
> argument for format specifier "%d".
> # 98|
> # 99| if (e->count > 2) {
> # 100|-> DPRINT("%s: unsupported count=%d\n", e->count);
> # 101| return PFM_ERR_NOTSUPP;
> # 102| }
>
>
> -Will_______________________________________________
> perfmon2-devel mailing list
> per...@li...
> https://lists.sourceforge.net/lists/listinfo/perfmon2-devel
>
|