From 55340cf96aefcd476ff9b504507e3d3f25dfd72a Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Tue, 17 May 2022 19:25:20 +0200 Subject: [PATCH] ucm: macro - add deep call protection (recursion) Signed-off-by: Jaroslav Kysela --- src/ucm/parser.c | 6 ++++++ src/ucm/ucm_local.h | 1 + 2 files changed, 7 insertions(+) diff --git a/src/ucm/parser.c b/src/ucm/parser.c index 53588494..71b95f0e 100644 --- a/src/ucm/parser.c +++ b/src/ucm/parser.c @@ -575,7 +575,13 @@ int uc_mgr_evaluate_inplace(snd_use_case_mgr_t *uc_mgr, /* conditions may depend on them */ if (err2 == 0) continue; + uc_mgr->macro_hops++; + if (uc_mgr->macro_hops > 100) { + uc_error("Maximal macro hops reached!"); + return -EINVAL; + } err3 = evaluate_macro(uc_mgr, cfg); + uc_mgr->macro_hops--; if (err3 < 0) return err3; if (err3 == 0) diff --git a/src/ucm/ucm_local.h b/src/ucm/ucm_local.h index 3f59bb2c..2c8d004d 100644 --- a/src/ucm/ucm_local.h +++ b/src/ucm/ucm_local.h @@ -264,6 +264,7 @@ struct snd_use_case_mgr { /* tree with macros */ snd_config_t *macros; + int macro_hops; /* local library configuration */ snd_config_t *local_config; -- 2.47.1