<!DOCTYPE html><html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<p>Hi Andre,<br>
</p>
<div class="moz-cite-prefix">On 20/11/2024 03:13, Andre Muezerie
wrote:<br>
</div>
<blockquote type="cite" cite="mid:1732072401-15962-7-git-send-email-andremue@linux.microsoft.com">
<pre wrap="" class="moz-quote-pre">From: Konstantin Ananyev <a class="moz-txt-link-rfc2396E" href="mailto:konstantin.ananyev@huawei.com"><konstantin.ananyev@huawei.com></a>
1) ./lib/hash/rte_thash.c:774:9
: warning: ISO C90 forbids variable length array ‘tmp_tuple’
>From my understanding, tuple size here should never exceed
sizeof(union rte_thash_tuple), so it should be safe to replace VLA with
fixed size array.</pre>
</blockquote>
<p>The tuple can exceed this size, for example if you use any
tunneling header in RSS hash calculation.</p>
<p><span class="EzKURWReUAB5oZgtQNkl" data-src-align="0:5" style="white-space: pre-wrap;">Here</span><span style="white-space: pre-wrap;"> </span><span class="EzKURWReUAB5oZgtQNkl" data-src-align="6:1" style="white-space: pre-wrap;">I</span><span style="white-space: pre-wrap;"> </span><span class="EzKURWReUAB5oZgtQNkl" data-src-align="8:9" style="white-space: pre-wrap;">suggest</span><span style="white-space: pre-wrap;"> </span><span class="EzKURWReUAB5oZgtQNkl" data-src-align="18:12" style="white-space: pre-wrap;">using</span><span style="white-space: pre-wrap;"> </span><span class="EzKURWReUAB5oZgtQNkl" data-src-align="33:8" style="white-space: pre-wrap;">as</span><span style="white-space: pre-wrap;"> a </span><span class="EzKURWReUAB5oZgtQNkl" data-src-align="42:11" style="white-space: pre-wrap;">limit</span><span style="white-space: pre-wrap;"> the </span><span class="EzKURWReUAB5oZgtQNkl" data-src-align="54:6" style="white-space: pre-wrap;">size</span><span style="white-space: pre-wrap;"> of </span><span class="EzKURWReUAB5oZgtQNkl" data-src-align="61:6" style="white-space: pre-wrap;">the</span><span style="white-space: pre-wrap;"> </span><span class="EzKURWReUAB5oZgtQNkl" data-src-align="68:8" style="white-space: pre-wrap;">longest</span><span style="white-space: pre-wrap;"> </span><span class="EzKURWReUAB5oZgtQNkl" data-src-align="77:3" style="white-space: pre-wrap;">RSS</span><span style="white-space: pre-wrap;"> </span><span class="EzKURWReUAB5oZgtQNkl" data-src-align="81:3" style="white-space: pre-wrap;">hash</span><span style="white-space: pre-wrap;"> </span><span class="EzKURWReUAB5oZgtQNkl" data-src-align="85:5" style="white-space: pre-wrap;">key</span><span style="white-space: pre-wrap;"> </span><span class="EzKURWReUAB5oZgtQNkl" data-src-align="111:13" style="white-space: pre-wrap;">currently</span><span style="white-space: pre-wrap;"> </span><span class="EzKURWReUAB5oZgtQNkl" data-src-align="92:15" style="white-space: pre-wrap;">supported</span><span class="EzKURWReUAB5oZgtQNkl" data-src-align="124:1" style="white-space: pre-wrap;">,</span><span style="white-space: pre-wrap;"> </span><span class="EzKURWReUAB5oZgtQNkl" data-src-align="126:7" style="white-space: pre-wrap;">which</span><span style="white-space: pre-wrap;"> </span><span class="EzKURWReUAB5oZgtQNkl" data-src-align="134:10" style="white-space: pre-wrap;">is</span><span style="white-space: pre-wrap;"> </span><span class="EzKURWReUAB5oZgtQNkl" data-src-align="145:2" style="white-space: pre-wrap;">52</span><span style="white-space: pre-wrap;"> </span><span class="EzKURWReUAB5oZgtQNkl" data-src-align="148:5" style="white-space: pre-wrap;">bytes.</span> Technically, the
longest tuple with such a key should be (52 - sizeof(uint32_t)),
so you can use this as a size of the tmp_tuple array</p>
<blockquote type="cite" cite="mid:1732072401-15962-7-git-send-email-andremue@linux.microsoft.com">
<pre wrap="" class="moz-quote-pre">
Signed-off-by: Konstantin Ananyev <a class="moz-txt-link-rfc2396E" href="mailto:konstantin.ananyev@huawei.com"><konstantin.ananyev@huawei.com></a>
---
lib/hash/rte_thash.c | 2 +-
lib/hash/rte_thash.h | 8 ++++++++
2 files changed, 9 insertions(+), 1 deletion(-)
diff --git a/lib/hash/rte_thash.c b/lib/hash/rte_thash.c
index 336c228e64..842e3ad85d 100644
--- a/lib/hash/rte_thash.c
+++ b/lib/hash/rte_thash.c
@@ -761,7 +761,7 @@ rte_thash_adjust_tuple(struct rte_thash_ctx *ctx,
uint32_t desired_value, unsigned int attempts,
rte_thash_check_tuple_t fn, void *userdata)
{
- uint32_t tmp_tuple[tuple_len / sizeof(uint32_t)];
+ uint32_t tmp_tuple[RTE_THASH_MAX_L4_LEN];
unsigned int i, j, ret = 0;
uint32_t hash, adj_bits;
const uint8_t *hash_key;
diff --git a/lib/hash/rte_thash.h b/lib/hash/rte_thash.h
index c0af5968df..427246ad2e 100644
--- a/lib/hash/rte_thash.h
+++ b/lib/hash/rte_thash.h
@@ -121,6 +121,14 @@ __rte_internal
uint32_t
thash_get_rand_poly(uint32_t poly_degree);
+/**
+ * maximum length in dwords of input tuple to
+ * calculate hash of ipv(4|6) header +
+ * transport header
+ */
+#define RTE_THASH_MAX_L4_LEN \
+ ((sizeof(union rte_thash_tuple)) / sizeof(uint32_t))
+
/**
* Prepare special converted key to use with rte_softrss_be()
* @param orig
</pre>
</blockquote>
<pre class="moz-signature" cols="72">--
Regards,
Vladimir</pre>
</body>
</html>