All of lore.kernel.org
 help / color / mirror / Atom feed
From: David Marchand <david.marchand@redhat.com>
To: dev@dpdk.org
Cc: mdr@ashroe.eu, dkozlyuk@oss.nvidia.com, thomas@monjalon.net,
	Olivier Matz <olivier.matz@6wind.com>,
	Andrew Rybchenko <andrew.rybchenko@oktetlabs.ru>
Subject: [dpdk-dev] [PATCH] mempool: enforce valid flags at creation
Date: Tue, 12 Oct 2021 09:28:48 +0200	[thread overview]
Message-ID: <20211012072848.17741-1-david.marchand@redhat.com> (raw)

If we do not enforce valid flags are passed by an application, this
application might face issues in the future when we add more flags.

Signed-off-by: David Marchand <david.marchand@redhat.com>
---
 app/test/test_mempool.c   | 21 +++++++++++++++++++++
 lib/mempool/rte_mempool.c | 13 +++++++++++++
 lib/mempool/rte_mempool.h |  2 +-
 3 files changed, 35 insertions(+), 1 deletion(-)

diff --git a/app/test/test_mempool.c b/app/test/test_mempool.c
index 7675a3e605..66bc8d86b7 100644
--- a/app/test/test_mempool.c
+++ b/app/test/test_mempool.c
@@ -205,6 +205,24 @@ static int test_mempool_creation_with_exceeded_cache_size(void)
 	return 0;
 }
 
+static int test_mempool_creation_with_unknown_flag(void)
+{
+	struct rte_mempool *mp_cov;
+
+	mp_cov = rte_mempool_create("test_mempool_unknown_flag", MEMPOOL_SIZE,
+		MEMPOOL_ELT_SIZE, 0, 0,
+		NULL, NULL,
+		NULL, NULL,
+		SOCKET_ID_ANY, MEMPOOL_F_NO_IOVA_CONTIG << 1);
+
+	if (mp_cov != NULL) {
+		rte_mempool_free(mp_cov);
+		RET_ERR();
+	}
+
+	return 0;
+}
+
 static struct rte_mempool *mp_spsc;
 static rte_spinlock_t scsp_spinlock;
 static void *scsp_obj_table[MAX_KEEP];
@@ -635,6 +653,9 @@ test_mempool(void)
 	if (test_mempool_creation_with_exceeded_cache_size() < 0)
 		GOTO_ERR(ret, err);
 
+	if (test_mempool_creation_with_unknown_flag() < 0)
+		GOTO_ERR(ret, err);
+
 	if (test_mempool_same_name_twice_creation() < 0)
 		GOTO_ERR(ret, err);
 
diff --git a/lib/mempool/rte_mempool.c b/lib/mempool/rte_mempool.c
index c5f859ae71..a2a78125f4 100644
--- a/lib/mempool/rte_mempool.c
+++ b/lib/mempool/rte_mempool.c
@@ -777,6 +777,13 @@ rte_mempool_cache_free(struct rte_mempool_cache *cache)
 	rte_free(cache);
 }
 
+#define MEMPOOL_KNOWN_FLAGS ( MEMPOOL_F_NO_SPREAD \
+	| MEMPOOL_F_NO_CACHE_ALIGN \
+	| MEMPOOL_F_SP_PUT \
+	| MEMPOOL_F_SC_GET \
+	| MEMPOOL_F_POOL_CREATED \
+	| MEMPOOL_F_NO_IOVA_CONTIG \
+	)
 /* create an empty mempool */
 struct rte_mempool *
 rte_mempool_create_empty(const char *name, unsigned n, unsigned elt_size,
@@ -806,6 +813,12 @@ rte_mempool_create_empty(const char *name, unsigned n, unsigned elt_size,
 			  RTE_CACHE_LINE_MASK) != 0);
 #endif
 
+	/* enforce no unknown flag is passed by the application */
+	if ((flags & ~MEMPOOL_KNOWN_FLAGS) != 0) {
+		rte_errno = EINVAL;
+		return NULL;
+	}
+
 	mempool_list = RTE_TAILQ_CAST(rte_mempool_tailq.head, rte_mempool_list);
 
 	/* asked for zero items */
diff --git a/lib/mempool/rte_mempool.h b/lib/mempool/rte_mempool.h
index f57ecbd6fc..5143b16a24 100644
--- a/lib/mempool/rte_mempool.h
+++ b/lib/mempool/rte_mempool.h
@@ -996,7 +996,7 @@ typedef void (rte_mempool_ctor_t)(struct rte_mempool *, void *);
  *   with rte_errno set appropriately. Possible rte_errno values include:
  *    - E_RTE_NO_CONFIG - function could not get pointer to rte_config structure
  *    - E_RTE_SECONDARY - function was called from a secondary process instance
- *    - EINVAL - cache size provided is too large
+ *    - EINVAL - cache size provided is too large or an unknown flag was passed
  *    - ENOSPC - the maximum number of memzones has already been allocated
  *    - EEXIST - a memzone with the same name already exists
  *    - ENOMEM - no appropriate memory area found in which to create memzone
-- 
2.23.0


             reply	other threads:[~2021-10-12  7:29 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-10-12  7:28 David Marchand [this message]
2021-10-12  7:49 ` [dpdk-dev] [PATCH] mempool: enforce valid flags at creation Andrew Rybchenko
2021-10-12  7:57   ` David Marchand
2021-10-14 19:16     ` David Marchand
2021-10-12 10:10 ` Kinsella, Ray
2021-10-14 19:29 ` [dpdk-dev] [PATCH v2] " David Marchand
2021-10-14 19:37   ` Stephen Hemminger
2021-10-15  7:02     ` Andrew Rybchenko
2021-10-15  8:26       ` David Marchand

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20211012072848.17741-1-david.marchand@redhat.com \
    --to=david.marchand@redhat.com \
    --cc=andrew.rybchenko@oktetlabs.ru \
    --cc=dev@dpdk.org \
    --cc=dkozlyuk@oss.nvidia.com \
    --cc=mdr@ashroe.eu \
    --cc=olivier.matz@6wind.com \
    --cc=thomas@monjalon.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.