diff --git a/valgrind-3.18.1-demangle-namespace.patch b/valgrind-3.18.1-demangle-namespace.patch
new file mode 100644
index 0000000..25ddf92
--- /dev/null
+++ b/valgrind-3.18.1-demangle-namespace.patch
@@ -0,0 +1,35 @@
+commit 542447d4708d4418a08e678dcf467af92b90b7ad
+Author: Mark Wielaard <mark@klomp.org>
+Date:   Mon Nov 22 13:07:59 2021 +0100
+
+    readdwarf3.c (parse_inl_DIE) inlined_subroutine can appear in namespaces
+    
+    This was broken by commit 75e3ef0f3 "readdwarf3: Skip units without
+    addresses when looking for inlined functions". Specifically by this
+    part: "Also use skip_DIE instead of read_DIE when not parsing
+    (skipping) children"
+    
+    rustc puts concrete function instances in namespaces (which is
+    allowed in DWARF since there is no strict separation between type
+    declarations and program scope entries in a DIE tree), the inline
+    parser didn't expect this and so skipped any DIE under a namespace
+    entry. This wasn't an issue before because "skipping" a DIE tree was
+    done by reading it, so it wasn't actually skipped. But now that we
+    really skip the DIE (sub)tree (which is faster than actually parsing
+    it) some entries were missed in the rustc case.
+    
+    https://bugs.kde.org/show_bug.cgi?id=445668
+
+diff --git a/coregrind/m_debuginfo/readdwarf3.c b/coregrind/m_debuginfo/readdwarf3.c
+index 18eecea9f..5489f8d13 100644
+--- a/coregrind/m_debuginfo/readdwarf3.c
++++ b/coregrind/m_debuginfo/readdwarf3.c
+@@ -3358,7 +3358,7 @@ static Bool parse_inl_DIE (
+    // might maybe contain a DW_TAG_inlined_subroutine:
+    Bool ret = (unit_has_addrs
+                || dtag == DW_TAG_lexical_block || dtag == DW_TAG_subprogram
+-               || dtag == DW_TAG_inlined_subroutine);
++               || dtag == DW_TAG_inlined_subroutine || dtag == DW_TAG_namespace);
+    return ret;
+ 
+   bad_DIE:
diff --git a/valgrind.spec b/valgrind.spec
index 512301a..a8ccb90 100644
--- a/valgrind.spec
+++ b/valgrind.spec
@@ -3,7 +3,7 @@
 Summary: Tool for finding memory management bugs in programs
 Name: %{?scl_prefix}valgrind
 Version: 3.18.1
-Release: 4%{?dist}
+Release: 5%{?dist}
 Epoch: 1
 License: GPLv2+
 URL: http://www.valgrind.org/
@@ -125,6 +125,9 @@ Patch16: valgrind-3.18.1-amd64-more-spec-rules.patch
 # "mutex is locked simultaneously by two threads" warning
 Patch17: valgrind-3.18.1-condvar.patch
 
+# KDE#445668 Inline stack frame generation is broken for Rust binaries
+Patch18: valgrind-3.18.1-demangle-namespace.patch
+
 BuildRequires: make
 BuildRequires: glibc-devel
 
@@ -274,6 +277,7 @@ Valgrind User Manual for details.
 %patch15 -p1
 %patch16 -p1
 %patch17 -p1
+%patch18 -p1
 
 %build
 # LTO triggers undefined symbols in valgrind.  Valgrind has a --enable-lto
@@ -503,6 +507,9 @@ fi
 %endif
 
 %changelog
+* Mon Nov 22 2021 Mark Wielaard <mjw@fedoraproject.org> - 3.18.1-5
+- Add valgrind-3.18.1-demangle-namespace.patch
+
 * Fri Nov 19 2021 Mark Wielaard <mjw@fedoraproject.org> - 3.18.1-4
 - Add valgrind-3.18.1-condvar.patch