[RFC PATCH 16/28] cli: lil: Convert LIL_ENABLE_RECLIMIT to KConfig

Sean Anderson
2021-07-01T06:19:09Z

This adds a configuration option to set the recursion limit. I've set it to
a (conservative) 1000 by default. In addition, there is an option to turn
it off for a very minor space savings and performance increase.

Signed-off-by: Sean Anderson <seanga2@gmail.com>
---
Do we need this? Perhaps it should default to 0.

cmd/Kconfig | 8 ++++++++
common/cli_lil.c | 10 ++--------
2 files changed, 10 insertions(+), 8 deletions(-)

diff --git a/cmd/Kconfig b/cmd/Kconfig
index 28a387b380..7c8962cfc2 100644
--- a/cmd/Kconfig
+++ b/cmd/Kconfig
@@ -53,6 +53,14 @@ config LIL_POOLS
use more memory but will cause considerably less memory fragmentation
and improve the script execution performance.

+config LIL_RECLIMIT
+ int "LIL function recursion limit"
+ default 1000
+ help
+ Enable limiting recursive calls to lil_parse - this can be used to
+ avoid call stack overflows and is also useful when running through an
+ automated fuzzer like AFL. Set to 0 to disable the recursion limit.
+
endif

endif
diff --git a/common/cli_lil.c b/common/cli_lil.c
index 750a085f63..6c05531441 100644
--- a/common/cli_lil.c
+++ b/common/cli_lil.c
@@ -17,10 +17,6 @@
#include <stdio.h>
#include <string.h>

-/* Enable limiting recursive calls to lil_parse - this can be used to avoid call stack
- * overflows and is also useful when running through an automated fuzzer like AFL */
-/*#define LIL_ENABLE_RECLIMIT 10000*/
-
#define HASHMAP_CELLS 256
#define HASHMAP_CELLMASK 0xFF

@@ -1198,12 +1194,10 @@ struct lil_value *lil_parse(struct lil *lil, const char *code, size_t codelen,

lil_skip_spaces(lil);
lil->parse_depth++;
-#ifdef LIL_ENABLE_RECLIMIT
- if (lil->parse_depth > LIL_ENABLE_RECLIMIT) {
- lil_set_error(lil, LIL_ERR_DEPTH, "Too many recursive calls");
+ if (CONFIG_LIL_RECLIMIT && lil->parse_depth > CONFIG_LIL_RECLIMIT) {
+ lil_set_error(lil, LIL_ERR_DEPTH, "recursion limit reached");
goto cleanup;
}
-#endif

if (lil->parse_depth == 1)
lil->err = LIL_ERR_NONE;
--
2.32.0