From b8e2b780e32764225c41970817da238ce8e681e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Josef=20S=C3=B6ntgen?= Date: Tue, 26 Apr 2022 14:58:09 +0200 Subject: [PATCH] nvme_drv: reject requests with unaligned offset Since the driver relies on all requests being Nvme::MPS_LOG2 aligned as advertised in its Block::Info the added check will reject any misaligned requests (using 'gpt_write' led to an IOMMU write fault). Issue #4486. --- repos/os/src/drivers/nvme/main.cc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/repos/os/src/drivers/nvme/main.cc b/repos/os/src/drivers/nvme/main.cc index 561e81678e..76050cc626 100644 --- a/repos/os/src/drivers/nvme/main.cc +++ b/repos/os/src/drivers/nvme/main.cc @@ -1649,6 +1649,9 @@ class Nvme::Driver : Genode::Noncopyable return Response::RETRY; } + if (!Genode::aligned(request.offset, Nvme::MPS_LOG2)) + return Response::REJECTED; + switch (request.operation.type) { case Block::Operation::Type::INVALID: return Response::REJECTED;