All of lore.kernel.org
 help / color / mirror / Atom feed
From: Aaron Conole <aconole@redhat.com>
To: dev@dpdk.org
Cc: Konstantin Ananyev <konstantin.ananyev@intel.com>,
	Pablo de Lara Guarch <pablo.de.lara.guarch@intel.com>
Subject: [dpdk-dev] [PATCH v2] librte_acl: fix undefined behavior
Date: Wed, 31 Jul 2019 11:43:11 -0400	[thread overview]
Message-ID: <20190731154311.8918-1-aconole@redhat.com> (raw)
In-Reply-To: <20190730213920.17225-1-aconole@redhat.com>

Left-shift of an integer constant is represented as 'int' type, but a left
shift of 1 by 31 bits in 'int' is undefined.  Use the U suffix to force
a representation as unsigned.

Caught while running with ubsan under gcc.

Fixes: dc276b5780c2 ("acl: new library")
Cc: Konstantin Ananyev <konstantin.ananyev@intel.com>
Signed-off-by: Aaron Conole <aconole@redhat.com>
---
v2: correct one other place where I could have used CHAR_BIT

I could have changed the sizeof(bits_t) * 8 in the bitset.bits as well during
the cleanup, but chose not to to keep the change only to the lines I needed.

 lib/librte_acl/acl_bld.c | 6 +++---
 lib/librte_acl/acl_gen.c | 4 ++--
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/lib/librte_acl/acl_bld.c b/lib/librte_acl/acl_bld.c
index b82191f42..9d27c0a5a 100644
--- a/lib/librte_acl/acl_bld.c
+++ b/lib/librte_acl/acl_bld.c
@@ -320,7 +320,7 @@ acl_add_ptr_range(struct acl_build_context *context,
 	for (n = 0; n < UINT8_MAX + 1; n++)
 		if (n >= low && n <= high)
 			bitset.bits[n / (sizeof(bits_t) * 8)] |=
-				1 << (n % (sizeof(bits_t) * 8));
+				1U << (n % (sizeof(bits_t) * CHAR_BIT));
 
 	return acl_add_ptr(context, root, node, &bitset);
 }
@@ -343,7 +343,7 @@ acl_gen_mask(struct rte_acl_bitset *bitset, uint32_t value, uint32_t mask)
 		if ((n & mask) == value) {
 			range++;
 			bitset->bits[n / (sizeof(bits_t) * 8)] |=
-				1 << (n % (sizeof(bits_t) * 8));
+				1U << (n % (sizeof(bits_t) * CHAR_BIT));
 		}
 	}
 	return range;
@@ -972,7 +972,7 @@ build_trie(struct acl_build_context *context, struct rte_acl_build_rule *head,
 				sizeof(*end->mrt));
 
 		for (m = context->cfg.num_categories; 0 != m--; ) {
-			if (rule->f->data.category_mask & (1 << m)) {
+			if (rule->f->data.category_mask & (1U << m)) {
 				end->mrt->results[m] = rule->f->data.userdata;
 				end->mrt->priority[m] = rule->f->data.priority;
 			} else {
diff --git a/lib/librte_acl/acl_gen.c b/lib/librte_acl/acl_gen.c
index 35a0140b4..81dec3aa6 100644
--- a/lib/librte_acl/acl_gen.c
+++ b/lib/librte_acl/acl_gen.c
@@ -133,7 +133,7 @@ acl_node_fill_dfa(const struct rte_acl_node *node,
 		for (n = 0; n < RTE_ACL_DFA_SIZE; n++) {
 
 			if (bits->bits[n / (sizeof(bits_t) * CHAR_BIT)] &
-				(1 << (n % (sizeof(bits_t) * CHAR_BIT)))) {
+				(1U << (n % (sizeof(bits_t) * CHAR_BIT)))) {
 
 				dfa[n] = resolved ? child->node_index : x;
 				ranges += (last_bit == 0);
@@ -175,7 +175,7 @@ acl_count_sequential_groups(struct rte_acl_bitset *bits, int zero_one)
 	}
 	for (n = 0; n < QRANGE_MIN; n++) {
 		if (bits->bits[n / (sizeof(bits_t) * 8)] &
-				(1 << (n % (sizeof(bits_t) * 8)))) {
+				(1U << (n % (sizeof(bits_t) * CHAR_BIT)))) {
 			if (zero_one == 1 && last_bit != 1)
 				ranges++;
 			last_bit = 1;
-- 
2.21.0


  parent reply	other threads:[~2019-07-31 15:43 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-07-30 21:39 [dpdk-dev] [PATCH] librte_acl: fix undefined behavior Aaron Conole
2019-07-31  8:16 ` Ananyev, Konstantin
2019-07-31 13:06   ` Aaron Conole
2019-07-31 15:43 ` Aaron Conole [this message]
2019-08-01  8:14   ` [dpdk-dev] [PATCH v2] " Ananyev, Konstantin
2019-08-02 20:02     ` Thomas Monjalon

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=20190731154311.8918-1-aconole@redhat.com \
    --to=aconole@redhat.com \
    --cc=dev@dpdk.org \
    --cc=konstantin.ananyev@intel.com \
    --cc=pablo.de.lara.guarch@intel.com \
    /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.