From 30323a2ded4de17f52eed2d8b7c9cb37a6bda7cb Mon Sep 17 00:00:00 2001 From: Christian Boltz Date: Fri, 16 Apr 2021 00:00:02 +0200 Subject: [PATCH] Detect endless #include loop when parsing profiles If an include file includes itsself (for example if local/foo has '#include '), print a warning instead of calling load_include() again and again. This fixes a crash when hitting such a case: RecursionError: maximum recursion depth exceeded while calling a Python object Fixes: https://bugzilla.suse.com/show_bug.cgi?id=1184779 for the tools. The parser will also need a fix. --- utils/apparmor/aa.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/utils/apparmor/aa.py b/utils/apparmor/aa.py index 3943740e9..f30b364aa 100644 --- a/utils/apparmor/aa.py +++ b/utils/apparmor/aa.py @@ -1855,7 +1855,11 @@ def parse_profile_data(data, file, do_include, in_preamble): if rule_name == 'inc_ie': for incname in rule_obj.get_full_paths(profile_dir): - load_include(incname, in_preamble) + if incname == file: + # warn about endless loop, and don't call load_include() (again) for this file + aaui.UI_Important(_('WARNING: endless loop detected: file %s includes itsself' % incname)) + else: + load_include(incname, in_preamble) elif RE_PROFILE_START.search(line): # Starting line of a profile # in_contained_hat is needed to know if we are already in a profile or not. (Simply checking if we are in a hat doesn't work,