mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-11 05:33:47 +01:00
Enforce 16 MB upper bound of memory usage in LZMA decoder.
This patch changes two things in our LZMA compression backend: - We lower the preset values for all `compression_level_t` values to ensure that we can run the LZMA decoder with less than 65 MB of memory available. This seems to have a small impact on the real world usage and fits well with our needs. - We set the upper bound of memory usage for the LZMA decoder to 16 MB. See: https://bugs.torproject.org/21665
This commit is contained in:
parent
e5122b91a9
commit
0672b33f1e
@ -22,6 +22,9 @@
|
|||||||
#include <lzma.h>
|
#include <lzma.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/** The maximum amount of memory we allow the LZMA decoder to use, in bytes. */
|
||||||
|
#define MEMORY_LIMIT (16 * 1024 * 1024)
|
||||||
|
|
||||||
/** Total number of bytes allocated for LZMA state. */
|
/** Total number of bytes allocated for LZMA state. */
|
||||||
static atomic_counter_t total_lzma_allocation;
|
static atomic_counter_t total_lzma_allocation;
|
||||||
|
|
||||||
@ -33,9 +36,9 @@ memory_level(compression_level_t level)
|
|||||||
switch (level) {
|
switch (level) {
|
||||||
default:
|
default:
|
||||||
case BEST_COMPRESSION:
|
case BEST_COMPRESSION:
|
||||||
case HIGH_COMPRESSION: return 9;
|
case HIGH_COMPRESSION: return 6;
|
||||||
case MEDIUM_COMPRESSION: return 6;
|
case MEDIUM_COMPRESSION: return 4;
|
||||||
case LOW_COMPRESSION: return 3;
|
case LOW_COMPRESSION: return 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -191,9 +194,7 @@ tor_lzma_compress_new(int compress,
|
|||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// FIXME(ahf): This should be something more sensible than
|
retval = lzma_alone_decoder(&result->stream, MEMORY_LIMIT);
|
||||||
// UINT64_MAX: See #21665.
|
|
||||||
retval = lzma_alone_decoder(&result->stream, UINT64_MAX);
|
|
||||||
|
|
||||||
if (retval != LZMA_OK) {
|
if (retval != LZMA_OK) {
|
||||||
log_warn(LD_GENERAL, "Error from LZMA decoder: %s (%u).",
|
log_warn(LD_GENERAL, "Error from LZMA decoder: %s (%u).",
|
||||||
|
Loading…
Reference in New Issue
Block a user