All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jim Cromie <jim.cromie@gmail.com>
To: jbaron@akamai.com, linux-kernel@vger.kernel.org,
	akpm@linuxfoundation.org, gregkh@linuxfoundation.org
Cc: linux@rasmusvillemoes.dk, Jim Cromie <jim.cromie@gmail.com>
Subject: [PATCH v5 07/18] dyndbg: fix a BUG_ON in ddebug_describe_flags
Date: Sun, 19 Jul 2020 17:10:47 -0600	[thread overview]
Message-ID: <20200719231058.1586423-8-jim.cromie@gmail.com> (raw)
In-Reply-To: <20200719231058.1586423-1-jim.cromie@gmail.com>

ddebug_describe_flags() currently fills a caller provided string buffer,
after testing its size (also passed) in a BUG_ON.  Fix this by
replacing them with a known-big-enough string buffer wrapped in a
struct, and passing that instead.

Also simplify ddebug_describe_flags() flags parameter from a struct to
a member in that struct, and hoist the member deref up to the caller.
This makes the function reusable (soon) where flags are unpacked.

Signed-off-by: Jim Cromie <jim.cromie@gmail.com>
---
 lib/dynamic_debug.c | 23 +++++++++++------------
 1 file changed, 11 insertions(+), 12 deletions(-)

diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c
index 9b2445507988..0cb5679f6c54 100644
--- a/lib/dynamic_debug.c
+++ b/lib/dynamic_debug.c
@@ -87,22 +87,22 @@ static struct { unsigned flag:8; char opt_char; } opt_array[] = {
 	{ _DPRINTK_FLAGS_NONE, '_' },
 };
 
+struct flagsbuf { char buf[ARRAY_SIZE(opt_array)+1]; };
+
 /* format a string into buf[] which describes the _ddebug's flags */
-static char *ddebug_describe_flags(struct _ddebug *dp, char *buf,
-				    size_t maxlen)
+static char *ddebug_describe_flags(unsigned int flags, struct flagsbuf *fb)
 {
-	char *p = buf;
+	char *p = fb->buf;
 	int i;
 
-	BUG_ON(maxlen < 6);
 	for (i = 0; i < ARRAY_SIZE(opt_array); ++i)
-		if (dp->flags & opt_array[i].flag)
+		if (flags & opt_array[i].flag)
 			*p++ = opt_array[i].opt_char;
-	if (p == buf)
+	if (p == fb->buf)
 		*p++ = '_';
 	*p = '\0';
 
-	return buf;
+	return fb->buf;
 }
 
 #define vnpr_info(lvl, fmt, ...)				\
@@ -147,7 +147,7 @@ static int ddebug_change(const struct ddebug_query *query,
 	struct ddebug_table *dt;
 	unsigned int newflags;
 	unsigned int nfound = 0;
-	char flagbuf[10];
+	struct flagsbuf fbuf;
 
 	/* search for matching ddebugs */
 	mutex_lock(&ddebug_lock);
@@ -204,8 +204,7 @@ static int ddebug_change(const struct ddebug_query *query,
 			v2pr_info("changed %s:%d [%s]%s =%s\n",
 				 trim_prefix(dp->filename), dp->lineno,
 				 dt->mod_name, dp->function,
-				 ddebug_describe_flags(dp, flagbuf,
-						       sizeof(flagbuf)));
+				 ddebug_describe_flags(dp->flags, &fbuf));
 		}
 	}
 	mutex_unlock(&ddebug_lock);
@@ -814,7 +813,7 @@ static int ddebug_proc_show(struct seq_file *m, void *p)
 {
 	struct ddebug_iter *iter = m->private;
 	struct _ddebug *dp = p;
-	char flagsbuf[10];
+	struct flagsbuf flags;
 
 	if (p == SEQ_START_TOKEN) {
 		seq_puts(m,
@@ -825,7 +824,7 @@ static int ddebug_proc_show(struct seq_file *m, void *p)
 	seq_printf(m, "%s:%u [%s]%s =%s \"",
 		   trim_prefix(dp->filename), dp->lineno,
 		   iter->table->mod_name, dp->function,
-		   ddebug_describe_flags(dp, flagsbuf, sizeof(flagsbuf)));
+		   ddebug_describe_flags(dp->flags, &flags));
 	seq_escape(m, dp->format, "\t\r\n\"");
 	seq_puts(m, "\"\n");
 
-- 
2.26.2


  parent reply	other threads:[~2020-07-19 23:12 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-07-19 23:10 [PATCH v5 00/18] dynamic_debug fixes, cleanups, features, export Jim Cromie
2020-07-19 23:10 ` [PATCH v5 01/18] dyndbg-docs: eschew file /full/path query in docs Jim Cromie
2020-07-19 23:10 ` [PATCH v5 02/18] dyndbg-docs: initialization is done early, not arch Jim Cromie
2020-07-19 23:10 ` [PATCH v5 03/18] dyndbg: drop obsolete comment on ddebug_proc_open Jim Cromie
2020-07-19 23:10 ` [PATCH v5 04/18] dyndbg: refine debug verbosity; 1 is basic, 2 more chatty Jim Cromie
2020-07-19 23:10 ` [PATCH v5 05/18] dyndbg: rename __verbose section to __dyndbg Jim Cromie
2020-07-19 23:10 ` [PATCH v5 06/18] dyndbg: fix overcounting of ram used by dyndbg Jim Cromie
2020-07-19 23:10 ` Jim Cromie [this message]
2020-07-19 23:10 ` [PATCH v5 08/18] dyndbg: fix pr_err with empty string Jim Cromie
2020-07-19 23:10 ` [PATCH v5 09/18] dyndbg: prefer declarative init in caller, to memset in callee Jim Cromie
2020-07-19 23:10 ` [PATCH v5 10/18] dyndbg: make ddebug_tables list LIFO for add/remove_module Jim Cromie
2020-07-19 23:10 ` [PATCH v5 11/18] dyndbg: use gcc ?: to reduce word count Jim Cromie
2020-07-19 23:10 ` [PATCH v5 12/18] dyndbg: refactor parse_linerange out of ddebug_parse_query Jim Cromie
2020-07-19 23:10 ` [PATCH v5 13/18] dyndbg: accept 'file foo.c:func1' and 'file foo.c:10-100' Jim Cromie
2020-07-19 23:10 ` [PATCH v5 14/18] dyndbg: accept query terms like file=bar and module=foo Jim Cromie
2020-07-19 23:10 ` [PATCH v5 15/18] dyndbg: combine flags & mask into a struct, simplify with it Jim Cromie
2020-07-19 23:10 ` [PATCH v5 16/18] dyndbg: allow anchored match on format query term Jim Cromie
2020-07-19 23:10 ` [PATCH v5 17/18] dyndbg: shorten our logging prefix, drop __func__ Jim Cromie
2020-07-19 23:10 ` [PATCH v5 18/18] dyndbg: export ddebug_exec_queries Jim Cromie
2020-07-24 13:48 ` [PATCH v5 00/18] dynamic_debug fixes, cleanups, features, export Jason Baron
2020-07-24 14:59   ` Greg KH
2020-07-24 15:00     ` Greg KH

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=20200719231058.1586423-8-jim.cromie@gmail.com \
    --to=jim.cromie@gmail.com \
    --cc=akpm@linuxfoundation.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=jbaron@akamai.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@rasmusvillemoes.dk \
    /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.