From 698b6eb641a58972eec00f814545846f5735fbeb Mon Sep 17 00:00:00 2001 From: Giovanni LB Date: Mon, 26 Aug 2024 17:41:20 -0300 Subject: [PATCH] Adding early checks for ELF file Change-Id: I1dc833fc2b017edae5c5456b14c376e88ca2bef7 --- plugin/att/code_printing.cpp | 9 +++++++++ plugin/att/disassembly.cpp | 9 +++++++++ 2 files changed, 18 insertions(+) diff --git a/plugin/att/code_printing.cpp b/plugin/att/code_printing.cpp index 5708c3b913..0550e5fac0 100644 --- a/plugin/att/code_printing.cpp +++ b/plugin/att/code_printing.cpp @@ -77,6 +77,15 @@ CodeObjDecoderComponent::CodeObjDecoderComponent( uint64_t codeobj_size, uint64_t gpu_id ) { + if ( + codeobj_size <= 4 || + codeobj_data[0] != ELFMAG0 || + codeobj_data[1] != ELFMAG1 || + codeobj_data[2] != ELFMAG2 || + codeobj_data[3] != ELFMAG3 + ) + throw std::invalid_argument("Invalid ELF file"); + m_fd = -1; #if defined(_GNU_SOURCE) && defined(MFD_ALLOW_SEALING) && defined(MFD_CLOEXEC) m_fd = ::memfd_create(m_uri.c_str(), MFD_ALLOW_SEALING | MFD_CLOEXEC); diff --git a/plugin/att/disassembly.cpp b/plugin/att/disassembly.cpp index f0b5d23eb2..657c8b948b 100644 --- a/plugin/att/disassembly.cpp +++ b/plugin/att/disassembly.cpp @@ -162,6 +162,15 @@ DisassemblyInstance::DisassemblyInstance( uint64_t gpu_id ) { + if ( + codeobj_size <= 4 || + codeobj_data[0] != ELFMAG0 || + codeobj_data[1] != ELFMAG1 || + codeobj_data[2] != ELFMAG2 || + codeobj_data[3] != ELFMAG3 + ) + throw std::invalid_argument("Invalid ELF file"); + buffer = std::vector(codeobj_size, 0); std::memcpy(buffer.data(), codeobj_data, codeobj_size);