From 745722862951ce029ac41bb490183e7fdef2b2e3 Mon Sep 17 00:00:00 2001 From: chbessonova Date: Wed, 13 Sep 2023 19:39:03 +0200 Subject: [PATCH] [llvm-nm] Fix heap-use-after-free while executing 'llvm-nm -n --export-symbols' (#65668) Use symbol's flags saved in `NMSymbol::SymFlags` inside `NMSymbol::isDefined()` since `BasicSymbolRef::getFlags()` requires the symbol's containing entity object to exist (which doesn't, causing llvm-nm to crash). --- llvm/tools/llvm-nm/llvm-nm.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/llvm/tools/llvm-nm/llvm-nm.cpp b/llvm/tools/llvm-nm/llvm-nm.cpp index 79213b3b2c27..8ac7eb2a825b 100644 --- a/llvm/tools/llvm-nm/llvm-nm.cpp +++ b/llvm/tools/llvm-nm/llvm-nm.cpp @@ -237,10 +237,8 @@ struct NMSymbol { std::string IndirectName; bool isDefined() const { - if (Sym.getRawDataRefImpl().p) { - uint32_t Flags = cantFail(Sym.getFlags()); - return !(Flags & SymbolRef::SF_Undefined); - } + if (Sym.getRawDataRefImpl().p) + return !(SymFlags & SymbolRef::SF_Undefined); return TypeChar != 'U'; }