Hi Andre,
On 20/11/2024 03:13, Andre Muezerie wrote:
From: Konstantin Ananyev<konstantin.anan...@huawei.com>
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.
The tuple can exceed this size, for example if you use any tunneling
header in RSS hash calculation.
HereIsuggestusingasa limitthe sizeof
thelongestRSShashkeycurrentlysupported,whichis52bytes. 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
Signed-off-by: Konstantin Ananyev<konstantin.anan...@huawei.com>
---
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
--
Regards,
Vladimir