app/testpmd: fix stack overflow for EEPROM display

When the size of EEPROM exceeds the default thread stack size(8MB),
e.g.: 10MB size, it will crash due to stack overflow.

Allocate the data of EPPROM information on the heap.

Fixes: 6b67721dee ("app/testpmd: add EEPROM command")
Cc: stable@dpdk.org

Signed-off-by: Steve Yang <stevex.yang@intel.com>
Acked-by: Aman Singh <aman.deep.singh@intel.com>
Tested-by: Ferruh Yigit <ferruh.yigit@intel.com>
This commit is contained in:
Steve Yang 2022-01-20 02:59:31 +00:00 committed by Ferruh Yigit
parent 3e02a95bef
commit ff6db88296

View File

@ -912,10 +912,15 @@ port_eeprom_display(portid_t port_id)
return;
}
char buf[len_eeprom];
einfo.offset = 0;
einfo.length = len_eeprom;
einfo.data = buf;
einfo.data = calloc(1, len_eeprom);
if (!einfo.data) {
fprintf(stderr,
"Allocation of port %u eeprom data failed\n",
port_id);
return;
}
ret = rte_eth_dev_get_eeprom(port_id, &einfo);
if (ret != 0) {
@ -933,10 +938,12 @@ port_eeprom_display(portid_t port_id)
fprintf(stderr, "Unable to get EEPROM: %d\n", ret);
break;
}
free(einfo.data);
return;
}
rte_hexdump(stdout, "hexdump", einfo.data, einfo.length);
printf("Finish -- Port: %d EEPROM length: %d bytes\n", port_id, len_eeprom);
free(einfo.data);
}
void
@ -972,10 +979,15 @@ port_module_eeprom_display(portid_t port_id)
return;
}
char buf[minfo.eeprom_len];
einfo.offset = 0;
einfo.length = minfo.eeprom_len;
einfo.data = buf;
einfo.data = calloc(1, minfo.eeprom_len);
if (!einfo.data) {
fprintf(stderr,
"Allocation of port %u eeprom data failed\n",
port_id);
return;
}
ret = rte_eth_dev_get_module_eeprom(port_id, &einfo);
if (ret != 0) {
@ -994,11 +1006,13 @@ port_module_eeprom_display(portid_t port_id)
ret);
break;
}
free(einfo.data);
return;
}
rte_hexdump(stdout, "hexdump", einfo.data, einfo.length);
printf("Finish -- Port: %d MODULE EEPROM length: %d bytes\n", port_id, einfo.length);
free(einfo.data);
}
int