mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-10 15:14:43 +00:00
fpga: xilinx: Avoid using local intermediate buffer
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>
This commit is contained in:
parent
cf772e9690
commit
d863909f36
1 changed files with 10 additions and 16 deletions
|
@ -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) {
|
||||
|
|
Loading…
Reference in a new issue