git: bb61cba751b3 - main - ddb: add the DB_CMD_MEMSAFE flag for commands
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Mon, 18 Jul 2022 22:06:51 UTC
The branch main has been updated by allanjude:
URL: https://cgit.FreeBSD.org/src/commit/?id=bb61cba751b3b1620d14af987a4025974b4b1b2e
commit bb61cba751b3b1620d14af987a4025974b4b1b2e
Author: Mitchell Horne <mhorne@FreeBSD.org>
AuthorDate: 2022-07-18 20:04:24 +0000
Commit: Allan Jude <allanjude@FreeBSD.org>
CommitDate: 2022-07-18 22:06:04 +0000
ddb: add the DB_CMD_MEMSAFE flag for commands
This flag value can be used to indicate if a command has the property of
being "memory safe". In this instance, memory safe means that the
command does not allow/enable reads or writes of arbitrary memory,
regardless of the arguments passed to it. For example, 'backtrace' is
considered a memory-safe command since its output is deterministic,
while 'show vnode' is not, since it requires a memory address as an
argument and will print the contents beginning at that location.
Apply the flag to the "show all" command macros. It is expected that
commands added to this table will always exhibit this property.
Reviewed by: markj
Sponsored by: Juniper Networks, Inc.
Sponsored by: Klara, Inc.
Differential Revision: https://reviews.freebsd.org/D35581
---
sys/ddb/ddb.h | 16 ++++++++++------
1 file changed, 10 insertions(+), 6 deletions(-)
diff --git a/sys/ddb/ddb.h b/sys/ddb/ddb.h
index 4e63907a6ed0..dce4e80ac117 100644
--- a/sys/ddb/ddb.h
+++ b/sys/ddb/ddb.h
@@ -110,13 +110,15 @@ typedef void db_cmdfcn_t(db_expr_t addr, bool have_addr, db_expr_t count,
* Command table entry.
*/
struct db_command {
- char * name; /* command name */
+ char *name; /* command name */
db_cmdfcn_t *fcn; /* function to call */
- int flag; /* extra info: */
+ int flag;
#define CS_OWN 0x1 /* non-standard syntax */
#define CS_MORE 0x2 /* standard syntax, but may have other words
* at end */
#define CS_SET_DOT 0x100 /* set dot after command */
+#define DB_CMD_MEMSAFE 0x1000 /* Command does not allow reads or writes to
+ * arbitrary memory. */
struct db_command_table *more; /* another level of command */
LIST_ENTRY(db_command) next; /* next entry in the command table */
};
@@ -180,10 +182,12 @@ _func(db_expr_t addr, bool have_addr, db_expr_t count, char *modif)
_DB_SET(_show, alias_name, func_name, db_show_table, flags, NULL)
#define DB_SHOW_ALIAS(alias_name, func_name) \
DB_SHOW_ALIAS_FLAGS(alias_name, func_name, 0)
-#define DB_SHOW_ALL_COMMAND(cmd_name, func_name) \
- _DB_FUNC(_show_all, cmd_name, func_name, db_show_all_table, 0, NULL)
-#define DB_SHOW_ALL_ALIAS(alias_name, func_name) \
- _DB_SET(_show_all, alias_name, func_name, db_show_all_table, 0, NULL)
+#define DB_SHOW_ALL_COMMAND(cmd_name, func_name) \
+ _DB_FUNC(_show_all, cmd_name, func_name, db_show_all_table, \
+ DB_CMD_MEMSAFE, NULL)
+#define DB_SHOW_ALL_ALIAS(alias_name, func_name) \
+ _DB_SET(_show_all, alias_name, func_name, db_show_all_table, \
+ DB_CMD_MEMSAFE, NULL)
extern db_expr_t db_maxoff;
extern int db_indent;