From: Bruce Richardson bruce.richardson@intel.com
Limit the telemetry command characters to the minimum set needed for current implementations. This prevents issues with invalid json characters needing to be escaped on replies.
Signed-off-by: Bruce Richardson bruce.richardson@intel.com Acked-by: Ciara Power ciara.power@intel.com Acked-by: Morten Brørup mb@smartsharesystems.com Acked-by: Chengwen Feng fengchengwen@huawei.com --- lib/telemetry/telemetry.c | 8 ++++++++ 1 file changed, 8 insertions(+)
diff --git a/lib/telemetry/telemetry.c b/lib/telemetry/telemetry.c index d4a7838ded..f0be50b2bf 100644 --- a/lib/telemetry/telemetry.c +++ b/lib/telemetry/telemetry.c @@ -3,6 +3,7 @@ */
#ifndef RTE_EXEC_ENV_WINDOWS +#include <ctype.h> #include <unistd.h> #include <pthread.h> #include <sys/socket.h> @@ -71,12 +72,19 @@ int rte_telemetry_register_cmd(const char *cmd, telemetry_cb fn, const char *help) { struct cmd_callback *new_callbacks; + const char *cmdp = cmd; int i = 0;
if (strlen(cmd) >= MAX_CMD_LEN || fn == NULL || cmd[0] != '/' || strlen(help) >= RTE_TEL_MAX_STRING_LEN) return -EINVAL;
+ while (*cmdp != '\0') { + if (!isalnum(*cmdp) && *cmdp != '_' && *cmdp != '/') + return -EINVAL; + cmdp++; + } + rte_spinlock_lock(&callback_sl); new_callbacks = realloc(callbacks, sizeof(callbacks[0]) * (num_callbacks + 1)); if (new_callbacks == NULL) {