From f8df8114715bb18272e36d15b664b930dc79112f Mon Sep 17 00:00:00 2001 From: Alexander Yermolovich Date: Fri, 22 Jul 2022 13:10:13 -0700 Subject: [PATCH] [DWP][DWARF] Detect and error on debug info offset overflow Right now we silently overflow uint32_t for debug_indfo sections. Added a check and error out. Differential Revision: https://reviews.llvm.org/D130395 --- llvm/lib/DWP/DWP.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/llvm/lib/DWP/DWP.cpp b/llvm/lib/DWP/DWP.cpp index 44e39c0..346f4df 100644 --- a/llvm/lib/DWP/DWP.cpp +++ b/llvm/lib/DWP/DWP.cpp @@ -18,6 +18,7 @@ #include "llvm/Object/Decompressor.h" #include "llvm/Object/ELFObjectFile.h" #include "llvm/Support/MemoryBuffer.h" +#include using namespace llvm; using namespace llvm::object; @@ -654,6 +655,12 @@ Error write(MCStreamer &Out, ArrayRef Inputs) { IndexVersion)]; C.Offset = InfoSectionOffset; C.Length = Header.Length + 4; + + if (std::numeric_limits::max() - InfoSectionOffset < + C.Length) + return make_error( + "debug information section offset is greater than 4GB"); + UnitOffset += C.Length; if (Header.Version < 5 || Header.UnitType == dwarf::DW_UT_split_compile) { -- 2.7.4