DPDK patches and discussions
 help / color / mirror / Atom feed
* [dpdk-dev] [PATCH] rib: fix undefined behavior
@ 2020-12-08 17:00 Vladimir Medvedkin
  2020-12-15  9:08 ` David Marchand
  0 siblings, 1 reply; 2+ messages in thread
From: Vladimir Medvedkin @ 2020-12-08 17:00 UTC (permalink / raw)
  To: dev; +Cc: david.marchand, vladimir.medvedkin, stable

According to GCC documentation for __builtin_clz:
Returns the number of leading 0-bits in x,
starting at the most significant bit position.
If x is 0, the result is undefined.
__builtin_clz will be called with 0 if the existing
prefix address matches the one we want to insert.

Fixes: 5a5793a5ffa2 ("rib: add RIB library")
Cc: vladimir.medvedkin@intel.com
Cc: stable@dpdk.org

Reported-by: David Marchand <david.marchand@redhat.com>
Signed-off-by: Vladimir Medvedkin <vladimir.medvedkin@intel.com>
---
 lib/librte_rib/rte_rib.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/librte_rib/rte_rib.c b/lib/librte_rib/rte_rib.c
index 2a370d7..6c29e1c 100644
--- a/lib/librte_rib/rte_rib.c
+++ b/lib/librte_rib/rte_rib.c
@@ -301,7 +301,7 @@ rte_rib_insert(struct rte_rib *rib, uint32_t ip, uint8_t depth)
 	/* closest node found, new_node should be inserted in the middle */
 	common_depth = RTE_MIN(depth, (*tmp)->depth);
 	common_prefix = ip ^ (*tmp)->ip;
-	d = __builtin_clz(common_prefix);
+	d = (common_prefix == 0) ? 32 : __builtin_clz(common_prefix);
 
 	common_depth = RTE_MIN(d, common_depth);
 	common_prefix = ip & rte_rib_depth_to_mask(common_depth);
-- 
2.7.4


^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [dpdk-dev] [PATCH] rib: fix undefined behavior
  2020-12-08 17:00 [dpdk-dev] [PATCH] rib: fix undefined behavior Vladimir Medvedkin
@ 2020-12-15  9:08 ` David Marchand
  0 siblings, 0 replies; 2+ messages in thread
From: David Marchand @ 2020-12-15  9:08 UTC (permalink / raw)
  To: Vladimir Medvedkin; +Cc: dev, dpdk stable

On Tue, Dec 8, 2020 at 6:00 PM Vladimir Medvedkin
<vladimir.medvedkin@intel.com> wrote:
>
> According to GCC documentation for __builtin_clz:
> Returns the number of leading 0-bits in x,
> starting at the most significant bit position.
> If x is 0, the result is undefined.
> __builtin_clz will be called with 0 if the existing
> prefix address matches the one we want to insert.
>
> Fixes: 5a5793a5ffa2 ("rib: add RIB library")
> Cc: stable@dpdk.org
>
> Reported-by: David Marchand <david.marchand@redhat.com>
> Signed-off-by: Vladimir Medvedkin <vladimir.medvedkin@intel.com>

Applied, thanks.


-- 
David Marchand


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2020-12-15  9:08 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-12-08 17:00 [dpdk-dev] [PATCH] rib: fix undefined behavior Vladimir Medvedkin
2020-12-15  9:08 ` David Marchand

DPDK patches and discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror https://inbox.dpdk.org/dev/0 dev/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 dev dev/ https://inbox.dpdk.org/dev \
		dev@dpdk.org
	public-inbox-index dev

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://inbox.dpdk.org/inbox.dpdk.dev


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git