ARM: zImage: don't ignore error returned from decompress()
If decompress() returns an error without calling error(), we must not attempt to boot the resulting kernel. Signed-off-by: Nicolas Pitre <nicolas.pitre@linaro.org> Tested-by: Shawn Guo <shawn.guo@linaro.org> Tested-by: Tony Lindgren <tony@atomide.com>
This commit is contained in:
committed by
Nicolas Pitre
parent
e40f1e9fb3
commit
ccc1c7c6c2
@@ -44,7 +44,7 @@ extern void error(char *);
|
|||||||
#include "../../../../lib/decompress_unlzma.c"
|
#include "../../../../lib/decompress_unlzma.c"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void do_decompress(u8 *input, int len, u8 *output, void (*error)(char *x))
|
int do_decompress(u8 *input, int len, u8 *output, void (*error)(char *x))
|
||||||
{
|
{
|
||||||
decompress(input, len, NULL, NULL, output, NULL, error);
|
return decompress(input, len, NULL, NULL, output, NULL, error);
|
||||||
}
|
}
|
||||||
|
@@ -177,7 +177,7 @@ asmlinkage void __div0(void)
|
|||||||
error("Attempting division by 0!");
|
error("Attempting division by 0!");
|
||||||
}
|
}
|
||||||
|
|
||||||
extern void do_decompress(u8 *input, int len, u8 *output, void (*error)(char *x));
|
extern int do_decompress(u8 *input, int len, u8 *output, void (*error)(char *x));
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -185,6 +185,8 @@ decompress_kernel(unsigned long output_start, unsigned long free_mem_ptr_p,
|
|||||||
unsigned long free_mem_ptr_end_p,
|
unsigned long free_mem_ptr_end_p,
|
||||||
int arch_id)
|
int arch_id)
|
||||||
{
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
output_data = (unsigned char *)output_start;
|
output_data = (unsigned char *)output_start;
|
||||||
free_mem_ptr = free_mem_ptr_p;
|
free_mem_ptr = free_mem_ptr_p;
|
||||||
free_mem_end_ptr = free_mem_ptr_end_p;
|
free_mem_end_ptr = free_mem_ptr_end_p;
|
||||||
@@ -193,7 +195,10 @@ decompress_kernel(unsigned long output_start, unsigned long free_mem_ptr_p,
|
|||||||
arch_decomp_setup();
|
arch_decomp_setup();
|
||||||
|
|
||||||
putstr("Uncompressing Linux...");
|
putstr("Uncompressing Linux...");
|
||||||
do_decompress(input_data, input_data_end - input_data,
|
ret = do_decompress(input_data, input_data_end - input_data,
|
||||||
output_data, error);
|
output_data, error);
|
||||||
|
if (ret)
|
||||||
|
error("decompressor returned an error");
|
||||||
|
else
|
||||||
putstr(" done, booting the kernel.\n");
|
putstr(" done, booting the kernel.\n");
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user