aboutsummaryrefslogtreecommitdiffstats
path: root/tools/firmware-utils/src/mkrasimage.c
diff options
context:
space:
mode:
authorMichael T Farnworth <michael@turf.org>2020-02-22 14:20:49 +0000
committerPetr Štetiar <ynezz@true.cz>2020-03-01 21:36:00 +0100
commitb468353a373d181c4362ff690d7b22a08f5f6949 (patch)
treea14f73f26944fed298a30d6c02486ee4b4babd4c /tools/firmware-utils/src/mkrasimage.c
parentc60be196933807cc0db90a36704e4505edd83eeb (diff)
downloadupstream-b468353a373d181c4362ff690d7b22a08f5f6949.tar.gz
upstream-b468353a373d181c4362ff690d7b22a08f5f6949.tar.bz2
upstream-b468353a373d181c4362ff690d7b22a08f5f6949.zip
mkrasimage: fix segmentation fault
Code was attempting to determine the size of the file before it was actually known and allocating insufficient memory space. Images above a certain size caused a segmentation fault. Moving the calloc() ensured ensured that large images didn't result in a buffer overflow on memcpy(). Signed-off-by: Michael T Farnworth <michael@turf.org> [fixed name in From to match one in SoB] Signed-off-by: Petr Štetiar <ynezz@true.cz>
Diffstat (limited to 'tools/firmware-utils/src/mkrasimage.c')
-rw-r--r--tools/firmware-utils/src/mkrasimage.c19
1 files changed, 10 insertions, 9 deletions
diff --git a/tools/firmware-utils/src/mkrasimage.c b/tools/firmware-utils/src/mkrasimage.c
index cff3a533d1..d8cec527fb 100644
--- a/tools/firmware-utils/src/mkrasimage.c
+++ b/tools/firmware-utils/src/mkrasimage.c
@@ -317,6 +317,16 @@ int build_image()
map_file(&kernel);
map_file(&rootfs);
+ /* As ZyXEL Web-GUI only accept images with a rootfs equal or larger than the first firmware shipped
+ * for the device, we need to pad rootfs partition to this size. To perform further calculations, we
+ * decide the size of this part here. In case the rootfs we want to integrate in our image is larger,
+ * take it's size, otherwise the supplied size.
+ *
+ * Be careful! We rely on assertion of correct size to be performed beforehand. It is unknown if images
+ * with a to large rootfs are accepted or not.
+ */
+ rootfs_out.size = rootfs_size < rootfs.size ? rootfs.size : rootfs_size;
+
/*
* Allocate memory and copy input rootfs for temporary output rootfs.
* This is important as we have to generate the rootfs checksum over the
@@ -451,14 +461,5 @@ int main(int argc, char *argv[])
if (ret)
usage(EXIT_FAILURE);
- /* As ZyXEL Web-GUI only accept images with a rootfs equal or larger than the first firmware shipped
- * for the device, we need to pad rootfs partition to this size. To perform further calculations, we
- * decide the size of this part here. In case the rootfs we want to integrate in our image is larger,
- * take it's size, otherwise the supplied size.
- *
- * Be careful! We rely on assertion of correct size to be performed beforehand. It is unknown if images
- * with a to large rootfs are accepted or not.
- */
- rootfs_out.size = rootfs_size < rootfs.size ? rootfs.size : rootfs_size;
return build_image();
}