From: "Paul E. McKenney" <paulmck@kernel.org>
To: rcu@vger.kernel.org
Cc: linux-kernel@vger.kernel.org, kernel-team@meta.com,
rostedt@goodmis.org, "Paul E. McKenney" <paulmck@kernel.org>
Subject: [PATCH rcu v2] 07/11] rcutorture: Make cur_ops->format_gp_seqs take buffer length
Date: Thu, 30 Jan 2025 11:04:40 -0800 [thread overview]
Message-ID: <20250130190444.1652700-7-paulmck@kernel.org> (raw)
In-Reply-To: <bd22a7da-a4e0-45dc-b43c-1532af4dcfc7@paulmck-laptop>
The Tree and Tiny implementations of rcutorture_format_gp_seqs() use
hard-coded constants for the length of the buffer that they format into.
This is of course an accident waiting to happen, so this commit therefore
makes them take a length argument. The rcutorture calling code uses
ARRAY_SIZE() to safely compute this new argument.
Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
---
kernel/rcu/rcu.h | 2 +-
kernel/rcu/rcutorture.c | 8 +++++---
kernel/rcu/tiny.c | 4 ++--
kernel/rcu/tree.c | 4 ++--
4 files changed, 10 insertions(+), 8 deletions(-)
diff --git a/kernel/rcu/rcu.h b/kernel/rcu/rcu.h
index d2a91f705a4a..eed2951a4962 100644
--- a/kernel/rcu/rcu.h
+++ b/kernel/rcu/rcu.h
@@ -591,7 +591,7 @@ void do_trace_rcu_torture_read(const char *rcutorturename,
static inline void rcu_gp_set_torture_wait(int duration) { }
#endif
unsigned long long rcutorture_gather_gp_seqs(void);
-void rcutorture_format_gp_seqs(unsigned long long seqs, char *cp);
+void rcutorture_format_gp_seqs(unsigned long long seqs, char *cp, size_t len);
#ifdef CONFIG_TINY_SRCU
diff --git a/kernel/rcu/rcutorture.c b/kernel/rcu/rcutorture.c
index 0f5a94542719..2e6e8664e403 100644
--- a/kernel/rcu/rcutorture.c
+++ b/kernel/rcu/rcutorture.c
@@ -411,7 +411,7 @@ struct rcu_torture_ops {
void (*gp_slow_unregister)(atomic_t *rgssp);
bool (*reader_blocked)(void);
unsigned long long (*gather_gp_seqs)(void);
- void (*format_gp_seqs)(unsigned long long seqs, char *cp);
+ void (*format_gp_seqs)(unsigned long long seqs, char *cp, size_t len);
long cbflood_max;
int irq_capable;
int can_boost;
@@ -3699,8 +3699,10 @@ rcu_torture_cleanup(void)
char buf2[20+1];
char sepchar = '-';
- cur_ops->format_gp_seqs(err_segs[i].rt_gp_seq, buf1);
- cur_ops->format_gp_seqs(err_segs[i].rt_gp_seq_end, buf2);
+ cur_ops->format_gp_seqs(err_segs[i].rt_gp_seq,
+ buf1, ARRAY_SIZE(buf1));
+ cur_ops->format_gp_seqs(err_segs[i].rt_gp_seq_end,
+ buf2, ARRAY_SIZE(buf2));
if (err_segs[i].rt_gp_seq == err_segs[i].rt_gp_seq_end) {
if (buf2[0]) {
for (j = 0; buf2[j]; j++)
diff --git a/kernel/rcu/tiny.c b/kernel/rcu/tiny.c
index b97c64e99a90..6380fbd27557 100644
--- a/kernel/rcu/tiny.c
+++ b/kernel/rcu/tiny.c
@@ -264,9 +264,9 @@ unsigned long long rcutorture_gather_gp_seqs(void)
}
EXPORT_SYMBOL_GPL(rcutorture_gather_gp_seqs);
-void rcutorture_format_gp_seqs(unsigned long long seqs, char *cp)
+void rcutorture_format_gp_seqs(unsigned long long seqs, char *cp, size_t len)
{
- snprintf(cp, 8, "g%04llx", seqs & 0xffffULL);
+ snprintf(cp, len, "g%04llx", seqs & 0xffffULL);
}
EXPORT_SYMBOL_GPL(rcutorture_format_gp_seqs);
#endif
diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c
index ac596596e771..1d201455aa7c 100644
--- a/kernel/rcu/tree.c
+++ b/kernel/rcu/tree.c
@@ -569,13 +569,13 @@ unsigned long long rcutorture_gather_gp_seqs(void)
EXPORT_SYMBOL_GPL(rcutorture_gather_gp_seqs);
/* Format grace-period sequence numbers for rcutorture diagnostics. */
-void rcutorture_format_gp_seqs(unsigned long long seqs, char *cp)
+void rcutorture_format_gp_seqs(unsigned long long seqs, char *cp, size_t len)
{
unsigned int egp = (seqs >> 16) & 0xffffffULL;
unsigned int ggp = (seqs >> 40) & 0xffffULL;
unsigned int pgp = seqs & 0xffffULL;
- snprintf(cp, 20, "g%04x:e%06x:p%04x", ggp, egp, pgp);
+ snprintf(cp, len, "g%04x:e%06x:p%04x", ggp, egp, pgp);
}
EXPORT_SYMBOL_GPL(rcutorture_format_gp_seqs);
--
2.40.1
next prev parent reply other threads:[~2025-01-30 19:04 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-01-16 20:24 [PATCH rcu 0/11] Torture-test updates Paul E. McKenney
2025-01-16 20:24 ` [PATCH rcu 01/11] torture: Add get_torture_init_jiffies() for test-start time Paul E. McKenney
2025-01-16 20:24 ` [PATCH rcu 02/11] rcutorture: Add a test_boost_holdoff module parameter Paul E. McKenney
2025-01-16 20:24 ` [PATCH rcu 03/11] rcutorture: Include grace-period sequence numbers in failure/close-call Paul E. McKenney
2025-01-16 20:24 ` [PATCH rcu 04/11] rcutorture: Expand failure/close-call grace-period output Paul E. McKenney
2025-01-16 20:24 ` [PATCH rcu 05/11] rcu: Trace expedited grace-period numbers in hexadecimal Paul E. McKenney
2025-01-16 20:24 ` [PATCH rcu 06/11] rcutorture: Add ftrace-compatible timestamp to GP# failure/close-call output Paul E. McKenney
2025-01-16 20:24 ` [PATCH rcu 07/11] rcutorture: Make cur_ops->format_gp_seqs take buffer length Paul E. McKenney
2025-01-16 20:24 ` [PATCH rcu 08/11] rcutorture: Move RCU_TORTURE_TEST_{CHK_RDR_STATE,LOG_CPU} to bool Paul E. McKenney
2025-01-16 20:24 ` [PATCH rcu 09/11] rcutorture: Complain when invalid SRCU reader_flavor is specified Paul E. McKenney
2025-01-16 20:24 ` [PATCH rcu 10/11] srcu: Add FORCE_NEED_SRCU_NMI_SAFE Kconfig for testing Paul E. McKenney
2025-01-16 20:24 ` [PATCH rcu 11/11] torture: Make SRCU lockdep testing use srcu_read_lock_nmisafe() Paul E. McKenney
2025-01-30 19:04 ` [PATCH rcu 0/11] Torture-test updates Paul E. McKenney
2025-01-30 19:04 ` [PATCH rcu v2] 01/11] torture: Add get_torture_init_jiffies() for test-start time Paul E. McKenney
2025-01-30 19:04 ` [PATCH rcu v2] 02/11] rcutorture: Add a test_boost_holdoff module parameter Paul E. McKenney
2025-01-30 19:04 ` [PATCH rcu v2] 03/11] rcutorture: Include grace-period sequence numbers in failure/close-call Paul E. McKenney
2025-01-30 19:04 ` [PATCH rcu v2] 04/11] rcutorture: Expand failure/close-call grace-period output Paul E. McKenney
2025-01-30 19:04 ` [PATCH rcu v2] 05/11] rcu: Trace expedited grace-period numbers in hexadecimal Paul E. McKenney
2025-01-30 19:04 ` [PATCH rcu v2] 06/11] rcutorture: Add ftrace-compatible timestamp to GP# failure/close-call output Paul E. McKenney
2025-01-30 19:04 ` Paul E. McKenney [this message]
2025-01-30 19:04 ` [PATCH rcu v2] 08/11] rcutorture: Move RCU_TORTURE_TEST_{CHK_RDR_STATE,LOG_CPU} to bool Paul E. McKenney
2025-01-30 19:04 ` [PATCH rcu v2] 09/11] rcutorture: Complain when invalid SRCU reader_flavor is specified Paul E. McKenney
2025-01-30 19:04 ` [PATCH rcu v2] 10/11] srcu: Add FORCE_NEED_SRCU_NMI_SAFE Kconfig for testing Paul E. McKenney
2025-01-30 19:04 ` [PATCH rcu v2] 11/11] torture: Make SRCU lockdep testing use srcu_read_lock_nmisafe() Paul E. McKenney
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=20250130190444.1652700-7-paulmck@kernel.org \
--to=paulmck@kernel.org \
--cc=kernel-team@meta.com \
--cc=linux-kernel@vger.kernel.org \
--cc=rcu@vger.kernel.org \
--cc=rostedt@goodmis.org \
/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.