[U-Boot] [PATCH] fpga: xilinx: Avoid using local intermediate buffer

From: Siva Durga Prasad Paladugu siva.durga.paladugu@xilinx.com
Dont use local temporary buffer for printing out the info instead use directly from memroy. This fixes the issue of stack corruprion due to local buffer overflow.
Signed-off-by: Siva Durga Prasad Paladugu sivadur@xilinx.com Signed-off-by: Michal Simek michal.simek@xilinx.com ---
drivers/fpga/xilinx.c | 26 ++++++++++---------------- 1 file changed, 10 insertions(+), 16 deletions(-)
diff --git a/drivers/fpga/xilinx.c b/drivers/fpga/xilinx.c index 2cd0104d8b15..941f30010a54 100644 --- a/drivers/fpga/xilinx.c +++ b/drivers/fpga/xilinx.c @@ -29,7 +29,6 @@ int fpga_loadbitstream(int devnum, char *fpgadata, size_t size, { unsigned int length; unsigned int swapsize; - char buffer[80]; unsigned char *dataptr; unsigned int i; const fpga_desc *desc; @@ -57,10 +56,8 @@ int fpga_loadbitstream(int devnum, char *fpgadata, size_t size,
length = (*dataptr << 8) + *(dataptr + 1); dataptr += 2; - for (i = 0; i < length; i++) - buffer[i] = *dataptr++; - - printf(" design filename = "%s"\n", buffer); + printf(" design filename = "%s"\n", dataptr); + dataptr += length;
/* get part number (identifier, length, string) */ if (*dataptr++ != 0x62) { @@ -71,23 +68,22 @@ int fpga_loadbitstream(int devnum, char *fpgadata, size_t size,
length = (*dataptr << 8) + *(dataptr + 1); dataptr += 2; - for (i = 0; i < length; i++) - buffer[i] = *dataptr++;
if (xdesc->name) { - i = (ulong)strstr(buffer, xdesc->name); + i = (ulong)strstr((char *)dataptr, xdesc->name); if (!i) { printf("%s: Wrong bitstream ID for this device\n", __func__); printf("%s: Bitstream ID %s, current device ID %d/%s\n", - __func__, buffer, devnum, xdesc->name); + __func__, dataptr, devnum, xdesc->name); return FPGA_FAIL; } } else { printf("%s: Please fill correct device ID to xilinx_desc\n", __func__); } - printf(" part number = "%s"\n", buffer); + printf(" part number = "%s"\n", dataptr); + dataptr += length;
/* get date (identifier, length, string) */ if (*dataptr++ != 0x63) { @@ -98,9 +94,8 @@ int fpga_loadbitstream(int devnum, char *fpgadata, size_t size,
length = (*dataptr << 8) + *(dataptr+1); dataptr += 2; - for (i = 0; i < length; i++) - buffer[i] = *dataptr++; - printf(" date = "%s"\n", buffer); + printf(" date = "%s"\n", dataptr); + dataptr += length;
/* get time (identifier, length, string) */ if (*dataptr++ != 0x64) { @@ -111,9 +106,8 @@ int fpga_loadbitstream(int devnum, char *fpgadata, size_t size,
length = (*dataptr << 8) + *(dataptr+1); dataptr += 2; - for (i = 0; i < length; i++) - buffer[i] = *dataptr++; - printf(" time = "%s"\n", buffer); + printf(" time = "%s"\n", dataptr); + dataptr += length;
/* get fpga data length (identifier, length) */ if (*dataptr++ != 0x65) {
participants (1)
-
Michal Simek