summaryrefslogtreecommitdiff
path: root/fdtoverlay.c
diff options
context:
space:
mode:
Diffstat (limited to 'fdtoverlay.c')
-rw-r--r--fdtoverlay.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/fdtoverlay.c b/fdtoverlay.c
index af909de..b2ac2e7 100644
--- a/fdtoverlay.c
+++ b/fdtoverlay.c
@@ -46,7 +46,7 @@ static int do_fdtoverlay(const char *input_filename,
{
char *blob = NULL;
char **ovblob = NULL;
- size_t blob_len, ov_len, total_len;
+ size_t blob_len, total_len;
int i, ret = -1;
blob = utilfdt_read(input_filename, &blob_len);
@@ -70,12 +70,20 @@ static int do_fdtoverlay(const char *input_filename,
/* read and keep track of the overlay blobs */
total_len = 0;
for (i = 0; i < argc; i++) {
+ size_t ov_len;
ovblob[i] = utilfdt_read(argv[i], &ov_len);
if (!ovblob[i]) {
fprintf(stderr, "\nFailed to read overlay %s\n",
argv[i]);
goto out_err;
}
+ if (fdt_totalsize(ovblob[i]) > ov_len) {
+ fprintf(stderr,
+"\nOverlay '%s' is incomplete (%lu / %" PRIu32 " bytes read)\n",
+ argv[i], (unsigned long)ov_len,
+ fdt_totalsize(ovblob[i]));
+ goto out_err;
+ }
total_len += ov_len;
}