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:
parent
3e02a95bef
commit
ff6db88296
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user