diff options
Diffstat (limited to 'drivers/fpga/xilinx.c')
| -rw-r--r-- | drivers/fpga/xilinx.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/drivers/fpga/xilinx.c b/drivers/fpga/xilinx.c index b6966c7d2cb..c0f8e61f9bf 100644 --- a/drivers/fpga/xilinx.c +++ b/drivers/fpga/xilinx.c @@ -44,6 +44,7 @@ int fpga_loadbitstream(int devnum, char *fpgadata, size_t size, unsigned int length; unsigned int swapsize; unsigned char *dataptr; + unsigned long hdrlen; unsigned int i; const fpga_desc *desc; xilinx_desc *xdesc; @@ -143,6 +144,14 @@ int fpga_loadbitstream(int devnum, char *fpgadata, size_t size, dataptr += 4; printf(" bytes in bitstream = %d\n", swapsize); + /* Make sure the header and data fit in the caller's buffer */ + hdrlen = (unsigned long)dataptr - (unsigned long)fpgadata; + if (hdrlen > size || swapsize > size - hdrlen) { + printf("%s: Bitstream does not fit in %lu byte buffer\n", + __func__, (unsigned long)size); + return FPGA_FAIL; + } + return fpga_load(devnum, dataptr, swapsize, bstype, 0); } |
