> -----Original Message-----
> From: Maxime Coquelin <[email protected]>
> Sent: Wednesday, September 22, 2021 17:58
> To: [email protected]; Xia, Chenbo <[email protected]>;
> [email protected]; [email protected];
> [email protected]; Yigit, Ferruh <[email protected]>;
> [email protected]; [email protected]; Li, Xiaoyun
> <[email protected]>
> Cc: [email protected]; [email protected]; [email protected];
> [email protected]; Maxime Coquelin <[email protected]>
> Subject: [PATCH v2 2/5] app/testpmd: fix RSS key length
> 
> port_rss_hash_key_update() initializes rss_conf with the RSS key configuration
> provided  by the user, but it calls
> rte_eth_dev_rss_hash_conf_get() before calling rte_eth_dev_rss_hash_update(),
> which overrides the parsed RSS config.
> 
> While the RSS key value is set again after, this is not the case of the key 
> length. It
> could cause out of bounds access if the key length parsed is smaller than the 
> one
> read from rte_eth_dev_rss_hash_conf_get().
> 
> This patch restores the key length before the
> rte_eth_dev_rss_hash_update() call to ensure the RSS key value/length pair is
> consistent.
> 
> Fixes: 8205e241b2b0 ("app/testpmd: add missing type to RSS hash commands")
> Cc: [email protected]
> 
> Signed-off-by: Maxime Coquelin <[email protected]>
> ---
>  app/test-pmd/config.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c index
> 9c66329e96..611965769c 100644
> --- a/app/test-pmd/config.c
> +++ b/app/test-pmd/config.c
> @@ -2854,7 +2854,7 @@ port_rss_hash_key_update(portid_t port_id, char
> rss_type[], uint8_t *hash_key,
>       unsigned int i;
> 
>       rss_conf.rss_key = NULL;
> -     rss_conf.rss_key_len = hash_key_len;
> +     rss_conf.rss_key_len = 0;
>       rss_conf.rss_hf = 0;
>       for (i = 0; rss_type_table[i].str; i++) {
>               if (!strcmp(rss_type_table[i].str, rss_type)) @@ -2863,6 +2863,7
> @@ port_rss_hash_key_update(portid_t port_id, char rss_type[], uint8_t
> *hash_key,
>       diag = rte_eth_dev_rss_hash_conf_get(port_id, &rss_conf);
>       if (diag == 0) {
>               rss_conf.rss_key = hash_key;
> +             rss_conf.rss_key_len = hash_key_len;
>               diag = rte_eth_dev_rss_hash_update(port_id, &rss_conf);
>       }
>       if (diag == 0)
> --
> 2.31.1

Acked-by: Xiaoyun Li <[email protected]>

Reply via email to