summaryrefslogtreecommitdiff
path: root/drivers/fpga/xilinx.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/fpga/xilinx.c')
-rw-r--r--drivers/fpga/xilinx.c9
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);
}