https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87675
Michael Matz <matz at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |matz at gcc dot gnu.org --- Comment #1 from Michael Matz <matz at gcc dot gnu.org> --- One of usual fuzzer fake CVEs. This is basically a similar "problem" like initially reported in https://sourceware.org/bugzilla/show_bug.cgi?id=23008 where I actually analyzed it. The problem is that C++ mangled names have a recursive structure. For demonstration purposes let's assume that the character 'F' in a mangled name means "here come nested template arguments, described next", then you need to recurse down to decode those nested args, and if the next character is 'F' as well, you just recurse down again. So a mangled "name" with a million 'F' characters in succession will need a recursion depth of a million. So, when you feed the demangler such a name a stack overflow is expected. Exactly when the overflow occurs depends on how the demangler is compiled, i.e. how much stack space is needed from one to the next recursion level (sometimes the recursion is tail recursion, so in some compilation modes can even be elided and so lead to non-exhaustion). Many characters of the mangled names have this property, so there are multiple variants of names that all lead to stack exhaustion, so the fuzzers were able to create many different testcases: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85122 (aka bugzilla PR23008) https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85452 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87335 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87636 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87675 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87681 Unfortunately they now also started to submit fake CVEs for these, like this one (CVE-2018-18701) or CVE-2018-18700 (aka bug 87681). If libiberty ever implements a check for this (which essentially can only be an arbitrary limit, which is frowned upon, especially as it must be very small, as people might have their stack limit set very low) fine, if not, also fine. Until then feeding such names to any demangling tool leads to stack exhaustion and hence segfault. Like any other memory exhaustion not a security bug.