All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Philippe Mathieu-Daudé" <philmd@redhat.com>
To: Eric Blake <eblake@redhat.com>, qemu-devel@nongnu.org
Cc: "Max Reitz" <mreitz@redhat.com>,
	"Aurelien Jarno" <aurelien@aurel32.net>,
	"Philippe Mathieu-Daudé" <philmd@redhat.com>,
	"Stefan Hajnoczi" <stefanha@redhat.com>,
	qemu-block@nongnu.org,
	"Aleksandar Markovic" <amarkovic@wavecomp.com>,
	"Kevin Wolf" <kwolf@redhat.com>,
	"Aleksandar Rikalo" <aleksandar.rikalo@rt-rk.com>,
	qemu-trivial@nongnu.org
Subject: [PATCH-for-4.2 v3 3/3] trace: Forbid dynamic field width in event format
Date: Mon, 18 Nov 2019 22:04:58 +0100	[thread overview]
Message-ID: <20191118210458.11959-4-philmd@redhat.com> (raw)
In-Reply-To: <20191118210458.11959-1-philmd@redhat.com>

Since not all trace backends support dynamic field width in
format (dtrace via stap does not), forbid them.

Add a check to refuse field width in new formats:

  $ make
  [...]
    GEN     hw/block/trace.h
  Traceback (most recent call last):
    File "scripts/tracetool.py", line 152, in <module>
      main(sys.argv)
    File "scripts/tracetool.py", line 143, in main
      events.extend(tracetool.read_events(fh, arg))
    File "scripts/tracetool/__init__.py", line 371, in read_events
      event = Event.build(line)
    File "scripts/tracetool/__init__.py", line 285, in build
      raise ValueError("Event format must not contain field width '%*'")
  ValueError: Error at hw/block/trace-events:11: Event format must not contain field width '%*'

Reported-by: Eric Blake <eblake@redhat.com>
Buglink: https://bugs.launchpad.net/qemu/+bug/1844817
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
---
v3:
- use better regex provided by Eric,
- instead of re.match(), use re.search() which takes unanchored regex,
- added a comment in tracing.txt
---
 docs/devel/tracing.txt        | 3 ++-
 scripts/tracetool/__init__.py | 3 +++
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/docs/devel/tracing.txt b/docs/devel/tracing.txt
index 8c0376fefa..6c01ce801e 100644
--- a/docs/devel/tracing.txt
+++ b/docs/devel/tracing.txt
@@ -113,7 +113,8 @@ Format strings should reflect the types defined in the trace event.  Take
 special care to use PRId64 and PRIu64 for int64_t and uint64_t types,
 respectively.  This ensures portability between 32- and 64-bit platforms.
 Format strings must not end with a newline character.  It is the responsibility
-of backends to adapt line ending for proper logging.
+of backends to adapt line ending for proper logging.  Format strings must not
+use numeric field width dynamic precision (SystemTap does not support them).
 
 Each event declaration will start with the event name, then its arguments,
 finally a format string for pretty-printing. For example:
diff --git a/scripts/tracetool/__init__.py b/scripts/tracetool/__init__.py
index 44c118bc2a..ec7fe9fa4a 100644
--- a/scripts/tracetool/__init__.py
+++ b/scripts/tracetool/__init__.py
@@ -206,6 +206,7 @@ class Event(object):
                       "\s*"
                       "(?:(?:(?P<fmt_trans>\".+),)?\s*(?P<fmt>\".+))?"
                       "\s*")
+    _DFWRE = re.compile(r"%[\d\.\- +#']*\*") # dynamic width precision
 
     _VALID_PROPS = set(["disable", "tcg", "tcg-trans", "tcg-exec", "vcpu"])
 
@@ -280,6 +281,8 @@ class Event(object):
         if fmt.endswith(r'\n"'):
             raise ValueError("Event format must not end with a newline "
                              "character")
+        if Event._DFWRE.search(fmt):
+            raise ValueError("Event format must not contain field width '%*'")
 
         if len(fmt_trans) > 0:
             fmt = [fmt_trans, fmt]
-- 
2.21.0



WARNING: multiple messages have this Message-ID (diff)
From: "Philippe Mathieu-Daudé" <philmd@redhat.com>
To: Eric Blake <eblake@redhat.com>, qemu-devel@nongnu.org
Cc: "Kevin Wolf" <kwolf@redhat.com>,
	"Stefan Hajnoczi" <stefanha@redhat.com>,
	qemu-block@nongnu.org, qemu-trivial@nongnu.org,
	"Max Reitz" <mreitz@redhat.com>,
	"Aleksandar Markovic" <amarkovic@wavecomp.com>,
	"Aleksandar Rikalo" <aleksandar.rikalo@rt-rk.com>,
	"Philippe Mathieu-Daudé" <philmd@redhat.com>,
	"Aurelien Jarno" <aurelien@aurel32.net>
Subject: [PATCH-for-4.2 v3 3/3] trace: Forbid dynamic field width in event format
Date: Mon, 18 Nov 2019 22:04:58 +0100	[thread overview]
Message-ID: <20191118210458.11959-4-philmd@redhat.com> (raw)
In-Reply-To: <20191118210458.11959-1-philmd@redhat.com>

Since not all trace backends support dynamic field width in
format (dtrace via stap does not), forbid them.

Add a check to refuse field width in new formats:

  $ make
  [...]
    GEN     hw/block/trace.h
  Traceback (most recent call last):
    File "scripts/tracetool.py", line 152, in <module>
      main(sys.argv)
    File "scripts/tracetool.py", line 143, in main
      events.extend(tracetool.read_events(fh, arg))
    File "scripts/tracetool/__init__.py", line 371, in read_events
      event = Event.build(line)
    File "scripts/tracetool/__init__.py", line 285, in build
      raise ValueError("Event format must not contain field width '%*'")
  ValueError: Error at hw/block/trace-events:11: Event format must not contain field width '%*'

Reported-by: Eric Blake <eblake@redhat.com>
Buglink: https://bugs.launchpad.net/qemu/+bug/1844817
Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com>
---
v3:
- use better regex provided by Eric,
- instead of re.match(), use re.search() which takes unanchored regex,
- added a comment in tracing.txt
---
 docs/devel/tracing.txt        | 3 ++-
 scripts/tracetool/__init__.py | 3 +++
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/docs/devel/tracing.txt b/docs/devel/tracing.txt
index 8c0376fefa..6c01ce801e 100644
--- a/docs/devel/tracing.txt
+++ b/docs/devel/tracing.txt
@@ -113,7 +113,8 @@ Format strings should reflect the types defined in the trace event.  Take
 special care to use PRId64 and PRIu64 for int64_t and uint64_t types,
 respectively.  This ensures portability between 32- and 64-bit platforms.
 Format strings must not end with a newline character.  It is the responsibility
-of backends to adapt line ending for proper logging.
+of backends to adapt line ending for proper logging.  Format strings must not
+use numeric field width dynamic precision (SystemTap does not support them).
 
 Each event declaration will start with the event name, then its arguments,
 finally a format string for pretty-printing. For example:
diff --git a/scripts/tracetool/__init__.py b/scripts/tracetool/__init__.py
index 44c118bc2a..ec7fe9fa4a 100644
--- a/scripts/tracetool/__init__.py
+++ b/scripts/tracetool/__init__.py
@@ -206,6 +206,7 @@ class Event(object):
                       "\s*"
                       "(?:(?:(?P<fmt_trans>\".+),)?\s*(?P<fmt>\".+))?"
                       "\s*")
+    _DFWRE = re.compile(r"%[\d\.\- +#']*\*") # dynamic width precision
 
     _VALID_PROPS = set(["disable", "tcg", "tcg-trans", "tcg-exec", "vcpu"])
 
@@ -280,6 +281,8 @@ class Event(object):
         if fmt.endswith(r'\n"'):
             raise ValueError("Event format must not end with a newline "
                              "character")
+        if Event._DFWRE.search(fmt):
+            raise ValueError("Event format must not contain field width '%*'")
 
         if len(fmt_trans) > 0:
             fmt = [fmt_trans, fmt]
-- 
2.21.0



  parent reply	other threads:[~2019-11-18 21:05 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-11-18 21:04 [PATCH-for-4.2 v3 0/3] hw: Remove dynamic field width from trace events Philippe Mathieu-Daudé
2019-11-18 21:04 ` Philippe Mathieu-Daudé
2019-11-18 21:04 ` [PATCH-for-4.2 v3 1/3] hw/block/pflash: " Philippe Mathieu-Daudé
2019-11-18 21:04   ` Philippe Mathieu-Daudé
2019-11-18 21:15   ` Eric Blake
2019-11-18 21:15     ` Eric Blake
2019-11-18 21:20     ` Philippe Mathieu-Daudé
2019-11-18 21:04 ` [PATCH-for-4.2 v3 2/3] hw/mips/gt64xxx: " Philippe Mathieu-Daudé
2019-11-18 21:04   ` Philippe Mathieu-Daudé
2019-11-18 21:17   ` Eric Blake
2019-11-18 21:17     ` Eric Blake
2019-11-18 21:04 ` Philippe Mathieu-Daudé [this message]
2019-11-18 21:04   ` [PATCH-for-4.2 v3 3/3] trace: Forbid dynamic field width in event format Philippe Mathieu-Daudé
2019-11-18 21:26   ` Eric Blake
2019-11-18 21:26     ` Eric Blake
2019-11-18 21:31     ` Philippe Mathieu-Daudé
2019-11-18 21:31       ` Philippe Mathieu-Daudé
2019-11-19  7:32 ` [PATCH-for-4.2 v3 0/3] hw: Remove dynamic field width from trace events Richard Henderson

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=20191118210458.11959-4-philmd@redhat.com \
    --to=philmd@redhat.com \
    --cc=aleksandar.rikalo@rt-rk.com \
    --cc=amarkovic@wavecomp.com \
    --cc=aurelien@aurel32.net \
    --cc=eblake@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=mreitz@redhat.com \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-trivial@nongnu.org \
    --cc=stefanha@redhat.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 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.