> > Removed audit call from dump function, where it doesn't belong.
> >
> > Added malloc/dealloc attribute to private cache alloc/free functions.
> >
> > Improved checks in mempool ops registration function.
> >
> > Improved cache audit checks.
> >
> > Added detailed description to definition of mempool name length.
> >
> > Updated some comments, and moved around some misplaced comments.
> >
> > Signed-off-by: Morten Brørup <[email protected]>
> > ---
>
> ....
>
> > diff --git a/lib/mempool/rte_mempool_ops.c
> > b/lib/mempool/rte_mempool_ops.c
> > index 066bec36fc..6d99c7a25c 100644
> > --- a/lib/mempool/rte_mempool_ops.c
> > +++ b/lib/mempool/rte_mempool_ops.c
> > @@ -27,7 +27,7 @@ int
> > rte_mempool_register_ops(const struct rte_mempool_ops *h)
> > {
> > struct rte_mempool_ops *ops;
> > - int16_t ops_index;
> > + unsigned int ops_index;
> >
> > rte_spinlock_lock(&rte_mempool_ops_table.sl);
> >
> > @@ -47,12 +47,22 @@ rte_mempool_register_ops(const struct
> > rte_mempool_ops *h)
> > return -EINVAL;
> > }
> >
> > - if (strlen(h->name) >= sizeof(ops->name) - 1) {
> > + if (strnlen(h->name, sizeof(h->name)) > sizeof(ops->name) - 1) {
> > rte_spinlock_unlock(&rte_mempool_ops_table.sl);
> > - RTE_MEMPOOL_LOG(DEBUG, "%s(): mempool_ops <%s>: name
> > too long",
> > - __func__, h->name);
> > - rte_errno = EEXIST;
> > - return -EEXIST;
> > + char name[sizeof(h->name) + 1];
> > + strlcpy(name, h->name, sizeof(name));
>
> Curious, why do you need to copy?
> Why can't t->name be used directly withiin the LOG()?
If the name uses the entire h->name array, it is not NUL-terminated, so I copy
it to add the NUL character.
Note the local variable I copy it to has room for +1 character, and strlcpy()
provides NUL termination.
>
> > + RTE_MEMPOOL_LOG(ERR, "%s(): mempool_ops <%s>: name too
> > long",
> > + __func__, name);
> > + return -ENAMETOOLONG;
> > + }
> > +
> > + for (ops_index = 0; ops_index < rte_mempool_ops_table.num_ops;
> > ops_index++) {
> > + if (!strcmp(h->name,
> > rte_mempool_ops_table.ops[ops_index].name)) {
> > + rte_spinlock_unlock(&rte_mempool_ops_table.sl);
> > + RTE_MEMPOOL_LOG(ERR, "%s(): mempool_ops <%s>:
> > name exists",
> > + __func__, h->name);
> > + return -EEXIST;
> > + }
> > }
> >
> > ops_index = rte_mempool_ops_table.num_ops++;
> > @@ -70,6 +80,8 @@ rte_mempool_register_ops(const struct
> rte_mempool_ops
> > *h)
> >
> > rte_spinlock_unlock(&rte_mempool_ops_table.sl);
> >
> > + RTE_MEMPOOL_LOG(DEBUG, "Registered mempool ops <%s> at index
> > %u", ops->name, ops_index);
> > +
> > return ops_index;
> > }
> >
> > @@ -185,8 +197,12 @@ rte_mempool_set_ops_byname(struct rte_mempool
> > *mp, const char *name,
> > }
> > }
> >
> > - if (ops == NULL)
> > + if (ops == NULL) {
> > + RTE_MEMPOOL_LOG(DEBUG,
> > + "Cannot set unknown mempool ops <%s>, of %u
> > ops registered",
> > + name, i);
> > return -EINVAL;
> > + }
> >
> > mp->ops_index = i;
> > mp->pool_config = pool_config;
> > --
> > 2.43.0