diff options
author | Michael T Farnworth <michael@turf.org> | 2020-02-22 14:20:49 +0000 |
---|---|---|
committer | Petr Štetiar <ynezz@true.cz> | 2020-03-01 21:36:00 +0100 |
commit | b468353a373d181c4362ff690d7b22a08f5f6949 (patch) | |
tree | a14f73f26944fed298a30d6c02486ee4b4babd4c /tools/firmware-utils/src/mkrasimage.c | |
parent | c60be196933807cc0db90a36704e4505edd83eeb (diff) | |
download | upstream-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.c | 19 |
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(); } |