From: Stephen Hemminger Date: Mon, 27 Apr 2020 23:16:22 +0000 (-0700) Subject: ring: check flag settings for future proofing X-Git-Url: http://git.droids-corp.org/?a=commitdiff_plain;h=3e71b3d4565a0365a599ee074304b4d85c78859f;hp=0371535d46c91ddc7a127e3a294a6c040bd5c763;p=dpdk.git ring: check flag settings for future proofing All API's should check that they support the flag values passed. These checks ensure that the extra bits can safely be used without risk of ABI breakage. Signed-off-by: Stephen Hemminger Reviewed-by: Honnappa Nagarahalli Acked-by: Bruce Richardson Acked-by: Konstantin Ananyev --- diff --git a/lib/librte_ring/rte_ring.c b/lib/librte_ring/rte_ring.c index ebe5ccf0de..58e502bc47 100644 --- a/lib/librte_ring/rte_ring.c +++ b/lib/librte_ring/rte_ring.c @@ -42,6 +42,11 @@ static struct rte_tailq_elem rte_ring_tailq = { }; EAL_REGISTER_TAILQ(rte_ring_tailq) +/* mask of all valid flag values to ring_create() */ +#define RING_F_MASK (RING_F_SP_ENQ | RING_F_SC_DEQ | RING_F_EXACT_SZ | \ + RING_F_MP_RTS_ENQ | RING_F_MC_RTS_DEQ | \ + RING_F_MP_HTS_ENQ | RING_F_MC_HTS_DEQ) + /* true if x is a power of 2 */ #define POWEROF2(x) ((((x)-1) & (x)) == 0) @@ -197,6 +202,13 @@ rte_ring_init(struct rte_ring *r, const char *name, unsigned count, RTE_BUILD_BUG_ON(offsetof(struct rte_ring_headtail, tail) != offsetof(struct rte_ring_rts_headtail, tail.val.pos)); + /* future proof flags, only allow supported values */ + if (flags & ~RING_F_MASK) { + RTE_LOG(ERR, RING, + "Unsupported flags requested %#x\n", flags); + return -EINVAL; + } + /* init the ring structure */ memset(r, 0, sizeof(*r)); ret = strlcpy(r->name, name, sizeof(r->name));