[RFC PATCH 16/28] cli: lil: Convert LIL_ENABLE_RECLIMIT to KConfig
Sean Anderson
seanga2 at gmail.com
Thu Jul 1 08:15:59 CEST 2021
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 at 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
More information about the U-Boot
mailing list