The tailq name should not be allowed to exceed limits.
Signed-off-by: Stephen Hemminger <[email protected]>
Acked-by: Bruce Richardson <[email protected]>
---
lib/eal/common/eal_common_tailqs.c | 13 ++++++++++++-
1 file changed, 12 insertions(+), 1 deletion(-)
diff --git a/lib/eal/common/eal_common_tailqs.c
b/lib/eal/common/eal_common_tailqs.c
index 47080d75ac..c581f43b6f 100644
--- a/lib/eal/common/eal_common_tailqs.c
+++ b/lib/eal/common/eal_common_tailqs.c
@@ -8,6 +8,7 @@
#include <rte_eal.h>
#include <rte_eal_memconfig.h>
+#include <rte_errno.h>
#include <rte_log.h>
#include <rte_string_fns.h>
@@ -30,8 +31,10 @@ rte_eal_tailq_lookup(const char *name)
unsigned i;
struct rte_mem_config *mcfg = rte_eal_get_configuration()->mem_config;
- if (name == NULL)
+ if (name == NULL) {
+ rte_errno = EINVAL;
return NULL;
+ }
for (i = 0; i < RTE_MAX_TAILQ; i++) {
if (!strncmp(name, mcfg->tailq_head[i].name,
@@ -39,6 +42,7 @@ rte_eal_tailq_lookup(const char *name)
return &mcfg->tailq_head[i];
}
+ rte_errno = ENOENT;
return NULL;
}
@@ -67,6 +71,12 @@ rte_eal_tailq_create(const char *name)
{
struct rte_tailq_head *head = NULL;
+ if (strlen(name) >= sizeof(head->name)) {
+ EAL_LOG(ERR, "tailq name '%s' is too long", name);
+ rte_errno = ENAMETOOLONG;
+ return NULL;
+ }
+
if (!rte_eal_tailq_lookup(name) &&
(rte_tailqs_count + 1 < RTE_MAX_TAILQ)) {
struct rte_mem_config *mcfg;
@@ -115,6 +125,7 @@ rte_eal_tailq_register(struct rte_tailq_elem *t)
if (rte_eal_tailq_local_register(t) < 0) {
EAL_LOG(ERR,
"%s tailq is already registered", t->name);
+ rte_errno = EEXIST;
goto error;
}
--
2.51.0