]> git.droids-corp.org - dpdk.git/commitdiff
app/testpmd: fix RSS key length
authorMaxime Coquelin <maxime.coquelin@redhat.com>
Wed, 27 Oct 2021 14:22:10 +0000 (16:22 +0200)
committerMaxime Coquelin <maxime.coquelin@redhat.com>
Fri, 29 Oct 2021 09:23:10 +0000 (11:23 +0200)
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: stable@dpdk.org
Signed-off-by: Maxime Coquelin <maxime.coquelin@redhat.com>
Acked-by: Xiaoyun Li <xiaoyun.li@intel.com>
Reviewed-by: Chenbo Xia <chenbo.xia@intel.com>
app/test-pmd/config.c

index 3b97164302fcbd20c3ea28a84324c93a2f7b51d3..dde6cdcff1cb45e17628e6d62f3f5818353e8160 100644 (file)
@@ -3042,7 +3042,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))
@@ -3051,6 +3051,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)