Skip to content

Commit

Permalink
fpga: xilinx: Avoid using local intermediate buffer
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Siva Durga Prasad Paladugu authored and Michal Simek committed Aug 2, 2017
1 parent cf772e9 commit d863909
Showing 1 changed file with 10 additions and 16 deletions.
26 changes: 10 additions & 16 deletions drivers/fpga/xilinx.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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) {
Expand All @@ -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) {
Expand All @@ -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) {
Expand All @@ -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) {
Expand Down

0 comments on commit d863909

Please sign in to comment.