From 6f0f7c7461616ddebf6f026def8b8eb75d04f2f7 Mon Sep 17 00:00:00 2001 From: Aarav <211792885+AaravMehta-07@users.noreply.github.com> Date: Tue, 13 Oct 2026 14:34:24 +0530 Subject: [PATCH] fix(relinker): reject relocatable ELF conversion inputs --- .../relinker/src/pipeline/RelinkerPipeline.cpp | 9 +++++++++ core/relinker/relinker/tests/test_elf_header.py | 10 ++++++++++ 2 files changed, 19 insertions(+) diff --git a/core/relinker/relinker/src/pipeline/RelinkerPipeline.cpp b/core/relinker/relinker/src/pipeline/RelinkerPipeline.cpp index 2baf1b713..eb02d1482 100644 --- a/core/relinker/relinker/src/pipeline/RelinkerPipeline.cpp +++ b/core/relinker/relinker/src/pipeline/RelinkerPipeline.cpp @@ -16,6 +16,12 @@ namespace Relinker { using namespace Elfpatcher; +namespace { + +constexpr std::uint16_t kEtRel = 1; + +} + RelinkerPipeline::RelinkerPipeline(std::shared_ptr elfReader, std::shared_ptr syscallScanner, std::shared_ptr callSiteResolver, std::shared_ptr validationPolicy, std::shared_ptr dynamicSectionBuilder, std::shared_ptr unusedNidFilter, std::uint32_t unusedFilterLevel, Domain::IProgress& progress) : elfReader(std::move(elfReader)) , syscallScanner(std::move(syscallScanner)) @@ -45,6 +51,9 @@ std::string RelinkerPipeline::relocationTypeName(std::uint32_t type) { } RelinkResult RelinkerPipeline::Relink(const std::vector& sourceElf) { + if (elfReader->ReadHeader().Type == kEtRel) + throw RelinkerException("ET_REL relocatable inputs are not supported"); + auto programHeaders = elfReader->ReadProgramHeaders(); std::vector textSection; diff --git a/core/relinker/relinker/tests/test_elf_header.py b/core/relinker/relinker/tests/test_elf_header.py index 171c44e1c..9b4238244 100644 --- a/core/relinker/relinker/tests/test_elf_header.py +++ b/core/relinker/relinker/tests/test_elf_header.py @@ -95,6 +95,16 @@ def main(): result = subprocess.run([str(relinker), "--skip-sce-module", str(source), str(output)], capture_output=True, text=True, timeout=20) assert result.returncode == 2 and error in result.stderr and not output.exists(), (name, result) + + relocatable = main_fixture() + struct.pack_into("