public inbox for linux-trace-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Wander Lairson Costa <wander@redhat.com>
To: Steven Rostedt <rostedt@goodmis.org>,
	Tomas Glozar <tglozar@redhat.com>,
	Wander Lairson Costa <wander@redhat.com>,
	Crystal Wood <crwood@redhat.com>,
	Ivan Pravdin <ipravdin.official@gmail.com>,
	Costa Shulyupin <costa.shul@redhat.com>,
	John Kacur <jkacur@redhat.com>,
	Tiezhu Yang <yangtiezhu@loongson.cn>,
	Daniel Bristot de Oliveira <bristot@kernel.org>,
	Daniel Wagner <dwagner@suse.de>,
	linux-trace-kernel@vger.kernel.org (open list:Real-time Linux
	Analysis (RTLA) tools),
	linux-kernel@vger.kernel.org (open list:Real-time Linux Analysis
	(RTLA) tools),
	bpf@vger.kernel.org (open list:BPF
	[MISC]:Keyword:(?:\b|_)bpf(?:\b|_))
Subject: [PATCH v4 00/18] rtla: Robustness and code quality improvements
Date: Mon,  9 Mar 2026 16:46:13 -0300	[thread overview]
Message-ID: <20260309195040.1019085-1-wander@redhat.com> (raw)

This series addresses multiple issues in the rtla codebase related to
error handling, string manipulation safety, and code maintainability.
The changes improve the tool's reliability and bring the code more in
line with kernel coding practices.

The series can be broadly divided into three categories:

Bug fixes address several correctness issues: a resource leak where
opendir() was not paired with closedir() on success paths, I/O loops
that failed to handle EINTR and partial writes correctly, a missing
bounds check when indexing the softirq_name array with kernel-provided
data, improper handling of pthread_create() failures, and a loop
condition that checked a pointer instead of the character it points to.

String handling improvements replace unsafe patterns throughout the
codebase. The strncpy() function is replaced with a new strscpy()
implementation that guarantees NUL-termination and provides truncation
detection. A str_has_prefix() helper replaces verbose strncmp/strlen
patterns for prefix matching. String comparisons are tightened to use
exact matching where appropriate, preventing silent acceptance of
malformed input like "100nsx" being parsed as "100ns".

Code quality improvements reduce duplication and improve readability.
A common_threshold_handler() consolidates repeated threshold action
logic. The extract_arg() macro simplifies key=value parsing. Magic
numbers are replaced with named constants (MAX_PATH, ARRAY_SIZE), and
redundant strlen() calls are cached in local variables.

All changes have been tested with the existing rtla test suite.

v4:
- Patch 3: Rename commit title from "rtla: Simplify argument parsing"
  to "rtla/actions: Simplify argument parsing" to clarify scope. Remove
  spurious whitespace change to container_of macro (Tomas Glozar).
- Patch 12: Fix a regression where strcmp() broke SCHED_DEADLINE
  priority parsing in "d:runtime:period" format (e.g., "d:10ms:100ms").
  Introduce match_time_unit() helper that checks the suffix is followed
  by end-of-string or ':' delimiter. Note that strncmp_static() was
  also considered but would fail because ARRAY_SIZE() includes the NUL
  terminator (Tomas Glozar).
- Patch 15: Add Fixes tag for stable backport tracking (Tomas Glozar).

v3:
- Address v2 feedback:
  - Rename common_restart() to common_threshold_handler() to better
    reflect its purpose (Tomas Glozar).
  - Implement a proper strscpy() for safer string handling instead of
    manual buffer sizing (Steven Rostedt).
  - Remove restart_result enum in favor of simpler, direct return
    values (Tomas Glozar).
- Add several new bug fixes, including a softirq vector bounds check,
  pthread_create() failure handling, robust I/O handling for
  EINTR/partial writes, and a resource leak fix.
- Introduce str_has_prefix() helper to replace verbose strncmp/strlen
  patterns.
- Tighten string parsing to enforce exact matching and reject invalid
  suffixes (e.g., "100nsx").
- Drop patches already merged via RTLA v6.20 pull request.

v2:
- exit on memory allocation failure
- remove redundant strlen() calls
- fix possible race on condition on stop_tracing variable access
- ensure null termination on read() calls
- fix checkpatch reports
- make extract_args() an inline function
- add the usage of common_restart() in more places

Wander Lairson Costa (18):
  rtla: Exit on memory allocation failures during initialization
  rtla: Use strdup() to simplify code
  rtla/actions: Simplify argument parsing
  rtla: Introduce common_threshold_handler() helper
  rtla: Replace magic number with MAX_PATH
  rtla: Simplify code by caching string lengths
  rtla: Add strscpy() and replace strncpy() calls
  rtla/timerlat: Add bounds check for softirq vector
  rtla: Handle pthread_create() failure properly
  rtla: Add str_has_prefix() helper function
  rtla: Use str_has_prefix() for prefix checks
  rtla: Enforce exact match for time unit suffixes
  rtla: Use str_has_prefix() for option prefix check
  rtla/timerlat: Simplify RTLA_NO_BPF environment variable check
  rtla/trace: Fix write loop in trace_event_save_hist()
  rtla/trace: Fix I/O handling in save_trace_to_file()
  rtla/utils: Fix resource leak in set_comm_sched_attr()
  rtla/utils: Fix loop condition in PID validation

 tools/tracing/rtla/src/actions.c       | 103 ++++++++++++---------
 tools/tracing/rtla/src/actions.h       |   8 +-
 tools/tracing/rtla/src/common.c        |  65 ++++++++++----
 tools/tracing/rtla/src/common.h        |  18 ++++
 tools/tracing/rtla/src/osnoise.c       |  26 ++----
 tools/tracing/rtla/src/osnoise_hist.c  |  22 ++---
 tools/tracing/rtla/src/osnoise_top.c   |  22 ++---
 tools/tracing/rtla/src/timerlat.c      |   5 +-
 tools/tracing/rtla/src/timerlat_aa.c   |  10 +--
 tools/tracing/rtla/src/timerlat_hist.c |  41 ++++-----
 tools/tracing/rtla/src/timerlat_top.c  |  54 +++++------
 tools/tracing/rtla/src/timerlat_u.c    |   4 +-
 tools/tracing/rtla/src/trace.c         | 102 +++++++++++----------
 tools/tracing/rtla/src/trace.h         |   4 +-
 tools/tracing/rtla/src/utils.c         | 119 +++++++++++++++++++++----
 tools/tracing/rtla/src/utils.h         |  29 +++++-
 16 files changed, 388 insertions(+), 244 deletions(-)

-- 
2.53.0


             reply	other threads:[~2026-03-09 19:55 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-03-09 19:46 Wander Lairson Costa [this message]
2026-03-09 19:46 ` [PATCH v4 01/18] rtla: Exit on memory allocation failures during initialization Wander Lairson Costa
2026-03-09 19:46 ` [PATCH v4 02/18] rtla: Use strdup() to simplify code Wander Lairson Costa
2026-03-09 19:46 ` [PATCH v4 03/18] rtla/actions: Simplify argument parsing Wander Lairson Costa
2026-03-09 19:46 ` [PATCH v4 04/18] rtla: Introduce common_threshold_handler() helper Wander Lairson Costa
2026-03-09 19:46 ` [PATCH v4 05/18] rtla: Replace magic number with MAX_PATH Wander Lairson Costa
2026-03-09 19:46 ` [PATCH v4 06/18] rtla: Simplify code by caching string lengths Wander Lairson Costa
2026-03-09 19:46 ` [PATCH v4 07/18] rtla: Add strscpy() and replace strncpy() calls Wander Lairson Costa
2026-03-09 19:46 ` [PATCH v4 08/18] rtla/timerlat: Add bounds check for softirq vector Wander Lairson Costa
2026-03-09 19:46 ` [PATCH v4 09/18] rtla: Handle pthread_create() failure properly Wander Lairson Costa
2026-03-09 19:46 ` [PATCH v4 10/18] rtla: Add str_has_prefix() helper function Wander Lairson Costa
2026-03-09 19:46 ` [PATCH v4 11/18] rtla: Use str_has_prefix() for prefix checks Wander Lairson Costa
2026-03-09 19:46 ` [PATCH v4 12/18] rtla: Enforce exact match for time unit suffixes Wander Lairson Costa
2026-03-12 12:17   ` Tomas Glozar
2026-03-09 19:46 ` [PATCH v4 13/18] rtla: Use str_has_prefix() for option prefix check Wander Lairson Costa
2026-03-09 19:46 ` [PATCH v4 14/18] rtla/timerlat: Simplify RTLA_NO_BPF environment variable check Wander Lairson Costa
2026-03-09 19:46 ` [PATCH v4 15/18] rtla/trace: Fix write loop in trace_event_save_hist() Wander Lairson Costa
2026-03-09 19:46 ` [PATCH v4 16/18] rtla/trace: Fix I/O handling in save_trace_to_file() Wander Lairson Costa
2026-03-09 19:46 ` [PATCH v4 17/18] rtla/utils: Fix resource leak in set_comm_sched_attr() Wander Lairson Costa
2026-03-09 19:46 ` [PATCH v4 18/18] rtla/utils: Fix loop condition in PID validation Wander Lairson Costa

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=20260309195040.1019085-1-wander@redhat.com \
    --to=wander@redhat.com \
    --cc=bpf@vger.kernel.org \
    --cc=bristot@kernel.org \
    --cc=costa.shul@redhat.com \
    --cc=crwood@redhat.com \
    --cc=dwagner@suse.de \
    --cc=ipravdin.official@gmail.com \
    --cc=jkacur@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-trace-kernel@vger.kernel.org \
    --cc=rostedt@goodmis.org \
    --cc=tglozar@redhat.com \
    --cc=yangtiezhu@loongson.cn \
    /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