mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-22 06:57:57 +00:00
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>
(cherry picked from commit b468353a37
)
This commit is contained in:
parent
bf5ea2a8dc
commit
96092a8eea
@ -315,6 +315,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
|
||||
@ -446,14 +456,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();
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user