From 695262624d7f173cf8c3553c0c63eb2ac4088b2d Mon Sep 17 00:00:00 2001 From: Bananymous Date: Sun, 10 Aug 2025 22:39:41 +0300 Subject: [PATCH] Kernel: Fix potential UB in AML OpRegion initialization --- kernel/kernel/ACPI/AML/Namespace.cpp | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/kernel/kernel/ACPI/AML/Namespace.cpp b/kernel/kernel/ACPI/AML/Namespace.cpp index dfe615d8..d160cbdc 100644 --- a/kernel/kernel/ACPI/AML/Namespace.cpp +++ b/kernel/kernel/ACPI/AML/Namespace.cpp @@ -243,14 +243,27 @@ namespace Kernel::ACPI::AML BAN::ErrorOr Namespace::initialize_op_regions() { + struct FullNode + { + Scope scope; + Reference* reference; + }; + + BAN::Vector op_regions; + for (const auto& [obj_path, obj_ref] : m_named_objects) { if (obj_ref->node.type != Node::Type::OpRegion) continue; - // FIXME: if _REG adds stuff to namespace, iterators are invalidated - (void)opregion_call_reg(obj_path, obj_ref->node); + TRY(op_regions.emplace_back( + TRY(obj_path.copy()), + obj_ref + )); } + for (const auto& [obj_path, obj_ref] : op_regions) + (void)opregion_call_reg(obj_path, obj_ref->node); + return {}; }