lzma: limit stack to ~28KB for decompressing kernel
This commit is contained in:
+14
-3
@@ -276,8 +276,14 @@ void PackVmlinuzI386::pack(OutputFile *fo)
|
|||||||
Filter ft(ph.level);
|
Filter ft(ph.level);
|
||||||
ft.buf_len = ph.u_len;
|
ft.buf_len = ph.u_len;
|
||||||
ft.addvalue = kernel_entry; // saves 4 bytes in unfilter code
|
ft.addvalue = kernel_entry; // saves 4 bytes in unfilter code
|
||||||
|
|
||||||
// compress
|
// compress
|
||||||
compressWithFilters(&ft, 1 << 20);
|
upx_compress_config_t cconf; cconf.reset();
|
||||||
|
#if 1 //{
|
||||||
|
// limit stack size needed for runtime decompression
|
||||||
|
cconf.conf_lzma.max_num_probs = 1846 + (768 << 4); // ushort: ~28KB stack
|
||||||
|
#endif //}
|
||||||
|
compressWithFilters(&ft, 512, 0, NULL, &cconf);
|
||||||
|
|
||||||
const unsigned lsize = getLoaderSize();
|
const unsigned lsize = getLoaderSize();
|
||||||
MemBuffer loader(lsize);
|
MemBuffer loader(lsize);
|
||||||
@@ -352,8 +358,13 @@ void PackBvmlinuzI386::pack(OutputFile *fo)
|
|||||||
Filter ft(ph.level);
|
Filter ft(ph.level);
|
||||||
ft.buf_len = ph.u_len;
|
ft.buf_len = ph.u_len;
|
||||||
ft.addvalue = kernel_entry; // saves 4 bytes in unfilter code
|
ft.addvalue = kernel_entry; // saves 4 bytes in unfilter code
|
||||||
// compress
|
|
||||||
compressWithFilters(&ft, 512);
|
upx_compress_config_t cconf; cconf.reset();
|
||||||
|
#if 1 //{
|
||||||
|
// limit stack size needed for runtime decompression
|
||||||
|
cconf.conf_lzma.max_num_probs = 1846 + (768 << 4); // ushort: ~28KB stack
|
||||||
|
#endif //}
|
||||||
|
compressWithFilters(&ft, 512, 0, NULL, &cconf);
|
||||||
|
|
||||||
// align everything to dword boundary - it is easier to handle
|
// align everything to dword boundary - it is easier to handle
|
||||||
unsigned c_len = ph.c_len;
|
unsigned c_len = ph.c_len;
|
||||||
|
|||||||
Reference in New Issue
Block a user