public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: Namhyung Kim <namhyung@kernel.org>
Cc: Suren Baghdasaryan <surenb@google.com>,
	Adrian Hunter <adrian.hunter@intel.com>,
	Colin Cross <ccross@google.com>, Ian Rogers <irogers@google.com>,
	Jiri Olsa <jolsa@kernel.org>, Kees Cook <keescook@chromium.org>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 1/1] perf beauty: Make the prctl arg regexp more strict to cope with PR_SET_VMA
Date: Tue, 1 Feb 2022 21:05:36 -0300	[thread overview]
Message-ID: <YfnK0KfMknsqKb2Z@kernel.org> (raw)
In-Reply-To: <CAM9d7cgVmH=sKH07+fPVzEPzCfDiKaMs_-kNgFHFc6W+0F9MfA@mail.gmail.com>

Em Tue, Feb 01, 2022 at 11:46:25AM -0800, Namhyung Kim escreveu:
> Hi Arnaldo,
> 
> On Tue, Feb 1, 2022 at 8:02 AM Arnaldo Carvalho de Melo <acme@kernel.org> wrote:
> >
> > FYI, I'm carrying this on the perf tools tree:
> >
> > ---
> >
> > This new PR_SET_VMA value isn't in sequence with all the other prctl
> > arguments and instead uses a big, 0x prefixed hex number: 0x53564d41 (S V M A).
> 
> It seems that we also have PR_SET_PTRACER: 0x59616d61.

so it has precedent, oh well, so we probably need a switch based
id->string and back for such cases, will check.
 
> >
> > This makes it harder to generate a string table as it would be rather
> > sparse, so make the regexp more stricter to avoid catching those.
> >
> > A followup patch for 'perf trace' to cope with such oddities will be
> > needed, but then its a matter for the next merge window.
> >
> > The next patch will update the prctl.h file to cope with this perf build
> > warning:
> >
> >   Warning: Kernel ABI header at 'tools/include/uapi/linux/prctl.h' differs from latest version at 'include/uapi/linux/prctl.h'
> >   diff -u tools/include/uapi/linux/prctl.h include/uapi/linux/prctl.h
> >
> > Here is the output of this script:
> >
> >   $ tools/perf/trace/beauty/prctl_option.sh
> >   static const char *prctl_options[] = {
> >         [1] = "SET_PDEATHSIG",
> >         [2] = "GET_PDEATHSIG",
> >         [3] = "GET_DUMPABLE",
> >         [4] = "SET_DUMPABLE",
> >         [5] = "GET_UNALIGN",
> >         [6] = "SET_UNALIGN",
> >         [7] = "GET_KEEPCAPS",
> >         [8] = "SET_KEEPCAPS",
> >         [9] = "GET_FPEMU",
> >         [10] = "SET_FPEMU",
> >         [11] = "GET_FPEXC",
> >         [12] = "SET_FPEXC",
> >         [13] = "GET_TIMING",
> >         [14] = "SET_TIMING",
> >         [15] = "SET_NAME",
> >         [16] = "GET_NAME",
> >         [19] = "GET_ENDIAN",
> >         [20] = "SET_ENDIAN",
> >         [21] = "GET_SECCOMP",
> >         [22] = "SET_SECCOMP",
> >         [23] = "CAPBSET_READ",
> >         [24] = "CAPBSET_DROP",
> >         [25] = "GET_TSC",
> >         [26] = "SET_TSC",
> >         [27] = "GET_SECUREBITS",
> >         [28] = "SET_SECUREBITS",
> >         [29] = "SET_TIMERSLACK",
> >         [30] = "GET_TIMERSLACK",
> >         [31] = "TASK_PERF_EVENTS_DISABLE",
> >         [32] = "TASK_PERF_EVENTS_ENABLE",
> >         [33] = "MCE_KILL",
> >         [34] = "MCE_KILL_GET",
> >         [35] = "SET_MM",
> >         [36] = "SET_CHILD_SUBREAPER",
> >         [37] = "GET_CHILD_SUBREAPER",
> >         [38] = "SET_NO_NEW_PRIVS",
> >         [39] = "GET_NO_NEW_PRIVS",
> >         [40] = "GET_TID_ADDRESS",
> >         [41] = "SET_THP_DISABLE",
> >         [42] = "GET_THP_DISABLE",
> >         [43] = "MPX_ENABLE_MANAGEMENT",
> >         [44] = "MPX_DISABLE_MANAGEMENT",
> >         [45] = "SET_FP_MODE",
> >         [46] = "GET_FP_MODE",
> >         [47] = "CAP_AMBIENT",
> >         [50] = "SVE_SET_VL",
> >         [51] = "SVE_GET_VL",
> >         [52] = "GET_SPECULATION_CTRL",
> >         [53] = "SET_SPECULATION_CTRL",
> >         [54] = "PAC_RESET_KEYS",
> >         [55] = "SET_TAGGED_ADDR_CTRL",
> >         [56] = "GET_TAGGED_ADDR_CTRL",
> >         [57] = "SET_IO_FLUSHER",
> >         [58] = "GET_IO_FLUSHER",
> >         [59] = "SET_SYSCALL_USER_DISPATCH",
> >         [60] = "PAC_SET_ENABLED_KEYS",
> >         [61] = "PAC_GET_ENABLED_KEYS",
> >         [62] = "SCHED_CORE",
> >   };
> >   static const char *prctl_set_mm_options[] = {
> >         [1] = "START_CODE",
> >         [2] = "END_CODE",
> >         [3] = "START_DATA",
> >         [4] = "END_DATA",
> >         [5] = "START_STACK",
> >         [6] = "START_BRK",
> >         [7] = "BRK",
> >         [8] = "ARG_START",
> >         [9] = "ARG_END",
> >         [10] = "ENV_START",
> >         [11] = "ENV_END",
> >         [12] = "AUXV",
> >         [13] = "EXE_FILE",
> >         [14] = "MAP",
> >         [15] = "MAP_SIZE",
> >   };
> >   $
> >
> > Cc: Adrian Hunter <adrian.hunter@intel.com>
> > Cc: Colin Cross <ccross@google.com>
> > Cc: Ian Rogers <irogers@google.com>
> > Cc: Jiri Olsa <jolsa@kernel.org>
> > Cc: Kees Cook <keescook@chromium.org>
> > Cc: Namhyung Kim <namhyung@kernel.org>
> > Cc: Suren Baghdasaryan <surenb@google.com>
> > Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
> > ---
> >  tools/perf/trace/beauty/prctl_option.sh | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/tools/perf/trace/beauty/prctl_option.sh b/tools/perf/trace/beauty/prctl_option.sh
> > index 3109d7b05e113bb5..3d278785fe574a0e 100755
> > --- a/tools/perf/trace/beauty/prctl_option.sh
> > +++ b/tools/perf/trace/beauty/prctl_option.sh
> > @@ -4,7 +4,7 @@
> >  [ $# -eq 1 ] && header_dir=$1 || header_dir=tools/include/uapi/linux/
> >
> >  printf "static const char *prctl_options[] = {\n"
> > -regex='^#define[[:space:]]+PR_(\w+)[[:space:]]*([[:xdigit:]]+).*'
> > +regex='^#define[[:space:]]{1}PR_(\w+)[[:space:]]*([[:xdigit:]]+)([[:space:]]*\/.*)?$'
> 
> I'm not sure what the last parenthesis takes care of.

Comments, the two first entries are:

#define PR_SET_PDEATHSIG  1  /* Second arg is a signal */
#define PR_GET_PDEATHSIG  2  /* Second arg is a ptr to return the signal */

In a tool friendly universe these should be in an enum and then we would
use BTF to do these integer to string and back translations, but where
we live we need to cope with these variations.
 
> >  egrep $regex ${header_dir}/prctl.h | grep -v PR_SET_PTRACER | \
> 
> Maybe just adding PR_SET_VMA here is enough?

Possibly, but that thing with PR_SET_PTRACER was a workaround that ended
up being forgotten :-\

Yeah, this is all fragile, having integer syscall args as enum entries
would help a lot tool writers, but then, don't complain, use what is
available.

- Arnaldo
 
> Thanks,
> Namhyung
> 
> 
> >         sed -r "s/$regex/\2 \1/g"       | \
> >         sort -n | xargs printf "\t[%s] = \"%s\",\n"

      reply	other threads:[~2022-02-02  0:06 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-02-01 16:02 [PATCH 1/1] perf beauty: Make the prctl arg regexp more strict to cope with PR_SET_VMA Arnaldo Carvalho de Melo
2022-02-01 19:46 ` Namhyung Kim
2022-02-02  0:05   ` Arnaldo Carvalho de Melo [this message]

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=YfnK0KfMknsqKb2Z@kernel.org \
    --to=acme@kernel.org \
    --cc=adrian.hunter@intel.com \
    --cc=ccross@google.com \
    --cc=irogers@google.com \
    --cc=jolsa@kernel.org \
    --cc=keescook@chromium.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=namhyung@kernel.org \
    --cc=surenb@google.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox