lzma: limit stack to ~28KB for decompressing kernel

This commit is contained in:
John Reiser
2006-06-28 22:34:12 -07:00
parent 193e085cf0
commit 362e98b43d
+14 -3
View File
@@ -276,8 +276,14 @@ void PackVmlinuzI386::pack(OutputFile *fo)
Filter ft(ph.level);
ft.buf_len = ph.u_len;
ft.addvalue = kernel_entry; // saves 4 bytes in unfilter code
// 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();
MemBuffer loader(lsize);
@@ -352,8 +358,13 @@ void PackBvmlinuzI386::pack(OutputFile *fo)
Filter ft(ph.level);
ft.buf_len = ph.u_len;
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
unsigned c_len = ph.c_len;