From c00f37b930931bbc0c8a7ecf7064f0fe8e9f5a8b Mon Sep 17 00:00:00 2001 From: Bananymous Date: Sun, 23 Aug 2026 15:08:01 +0300 Subject: [PATCH] Kernel: Evaluate and validate PS/2 _CRS Don't assume it is a buffer. On bochs it is a method :D --- kernel/kernel/Input/PS2/Controller.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/kernel/kernel/Input/PS2/Controller.cpp b/kernel/kernel/Input/PS2/Controller.cpp index bf31a73a..10dcf5e4 100644 --- a/kernel/kernel/Input/PS2/Controller.cpp +++ b/kernel/kernel/Input/PS2/Controller.cpp @@ -319,11 +319,18 @@ namespace Kernel::Input if (crs_obj == nullptr) return PS2ResourceSetting {}; + const auto crs = TRY(ACPI::AML::evaluate_node(crs_path, crs_obj->node)); + if (crs.type != ACPI::AML::Node::Type::Buffer) + { + dwarnln("PS/2 _CRS is not a buffer, but {}", crs); + return BAN::Error::from_errno(EINVAL); + } + PS2ResourceSetting result; result.type = type; BAN::Optional data; - ACPI::ResourceParser parser({ crs_obj->node.as.str_buf->bytes, static_cast(crs_obj->node.as.str_buf->size) }); + ACPI::ResourceParser parser({ crs.as.str_buf->bytes, static_cast(crs.as.str_buf->size) }); while ((data = parser.get_next()).has_value()) { switch (data->type)