From d9a6b37ab1597ac726e5f972ebfbccf024c58cbc Mon Sep 17 00:00:00 2001 From: =?utf8?q?Alexander=20F=C3=A6r=C3=B8y?= Date: Wed, 13 Sep 2023 16:13:28 +0200 Subject: [PATCH] Add diagnostic log message for compression bombs. This patch causes `tor_compress_is_compression_bomb()` to emit a warning-level log message that lets us learn the potential ratio of the input to output buffer sizes. Hopefully, this will give us a bit of a better idea whether the compression bomb ratio needs some tuning. See: tpo/core/tor#40739. --- changes/ticket40739 | 3 +++ src/lib/compress/compress.c | 10 +++++++++- src/test/test_util.c | 2 +- 3 files changed, 13 insertions(+), 2 deletions(-) create mode 100644 changes/ticket40739 diff --git a/changes/ticket40739 b/changes/ticket40739 new file mode 100644 index 0000000000..f60bfc5d87 --- /dev/null +++ b/changes/ticket40739 @@ -0,0 +1,3 @@ + o Minor features (debugging, compression): + - Log the input and output buffer sizes when we detect a potential + compression bomb. Diagnostic for ticket 40739. diff --git a/src/lib/compress/compress.c b/src/lib/compress/compress.c index 83e63905cc..346e77f07d 100644 --- a/src/lib/compress/compress.c +++ b/src/lib/compress/compress.c @@ -66,7 +66,15 @@ tor_compress_is_compression_bomb,(size_t size_in, size_t size_out)) if (size_in == 0 || size_out < CHECK_FOR_COMPRESSION_BOMB_AFTER) return 0; - return (size_out / size_in > MAX_UNCOMPRESSION_FACTOR); + if (size_out / size_in > MAX_UNCOMPRESSION_FACTOR) { + log_warn(LD_GENERAL, + "Detected possible compression bomb with " + "input size = %"TOR_PRIuSZ " and output size = %"TOR_PRIuSZ, + size_in, size_out); + return 1; + } + + return 0; } /** Guess the size that in_len will be after compression or diff --git a/src/test/test_util.c b/src/test/test_util.c index 1dae2c617e..391c3d07c1 100644 --- a/src/test/test_util.c +++ b/src/test/test_util.c @@ -2945,7 +2945,7 @@ test_util_gzip_compression_bomb(void *arg) tt_int_op(-1, OP_EQ, tor_compress(&result, &result_len, one_mb, one_million, ZLIB_METHOD)); - expect_single_log_msg_containing( + expect_log_msg_containing( "We compressed something and got an insanely high " "compression factor; other Tors would think this " "was a compression bomb."); -- 2.11.4.GIT