From: Xiu Jianfeng <xiujianfeng@huawei.com>
To: "Mario Limonciello (AMD)" <superm1@kernel.org>,
"Joerg Roedel (AMD)" <joro@8bytes.org>,
Will Deacon <will@kernel.org>,
Robin Murphy <robin.murphy@arm.com>,
Nicolas Bouchinet <nicolas.bouchinet@oss.cyber.gouv.fr>,
Paul Moore <paul@paul-moore.com>,
James Morris <jmorris@namei.org>,
"Serge E. Hallyn" <serge@hallyn.com>
Cc: <iommu@lists.linux.dev>, <linux-kernel@vger.kernel.org>,
<linux-security-module@vger.kernel.org>
Subject: Re: [PATCH 0/2] lockdown: Prevent booting with lockdown enabled but IOMMU disabled
Date: Wed, 11 Nov 2026 15:30:19 +0800 [thread overview]
Message-ID: <44ac3423-0a51-4562-816a-fea881511afa@huawei.com> (raw)
In-Reply-To: <20261102-lockdown-iommu-v1-0-00f3c2be4c9f@kernel.org>
On 11/2/2026 10:00 PM, Mario Limonciello (AMD) wrote:
> Lockdown is a kernel LSM that restricts access to sensitive kernel
> resources (e.g. /dev/mem, kernel modules, perf, tracing, kprobes,
> BPF access to kernel memory). However, without IOMMU, any PCI/PCIe
> device can perform DMA to arbitrary physical memory, effectively
> bypassing all lockdown protections.
>
> A malicious or compromised device can:
> - Read kernel memory directly (encryption keys, credentials, secrets)
> - Write to kernel memory directly (code patches, rootkits, backdoors)
> - Circumvent all lockdown LSM checks (which run inside the kernel)
>
Hi Mario,
Thanks for your contribution.
Let me first make my position clear: I'm not questioning the motivation
behind this series -- "without an IOMMU, PCI/PCIe devices can DMA to
arbitrary physical memory" is a real and legitimate concern. What I'd
like to raise for discussion is: whether this class of problem should be
addressed by lockdown in the first place. I'm honestly doubtful, so I'd
very much welcome other people's views.
My doubt comes from a mismatch between the threat this series is trying
to fix and the threat model lockdown was built around. Lockdown is, by
design, a way to protect the boundary between UID 0 and the kernel: it
came from the UEFI Secure Boot work, and it only limits the ways
software can reach the kernel -- /dev/mem, module loading, kexec, device
access via iopl/MSR/ACPI, and so on. The attacker it thinks about is a
privileged user (root) on the system. The problem in this series,
however, is about a malicious or bad hardware device, whose attack path
lives at the bus/hardware layer rather than in the software access paths
lockdown protects. To me, that looks like a different threat class with
a different owner.
It also does not look like a new question. The DMA-from-untrusted-device
problem was discussed in detail on linux-kernel back in May–June 2020,
in the "RFC Restrict the untrusted devices, to bind to only a set of
'whitelisted' drivers" thread:
https://lore.kernel.org/all/CACK8Z6E8pjVeC934oFgr=VB3pULx_GyT2NkzAogdRQJ9TKSX9A@mail.gmail.com/
The conclusion of that discussion, as I read it, is that device-level
DMA threats are handled by the PCI/IOMMU line of defense -- the
untrusted-device marking in the PCI core, IOMMU/ACS settings, and
driver/device review -- not by lockdown. Interestingly, that thread also
shows that "with an IOMMU or without an IOMMU" is not a clean split in
either direction: ATS and driver bugs can defeat DMA isolation even with
an IOMMU in place, while ACS Translation Blocking can still help on
systems without one. So if my reading is correct, "is there an IOMMU?"
is not a good test here. It does not really stop the DMA attack this
series worries about, and it goes beyond lockdown's original job.
Also worth noting: systems without an IOMMU are not rare. Many embedded
boards and virtual machines have no IOMMU at all. Lockdown, meanwhile,
is often enabled automatically in Secure Boot deployments, On such
systems, a panic-on-no-IOMMU check would turn a normal setup into a boot
failure.
Given what lockdown is for and the earlier discussion, the problem of a
device doing DMA without an IOMMU is probably not a problem for the
lockdown LSM to address, and that it belongs with the PCI/IOMMU
subsystems and platform policy instead.
I would welcome other views on this.
> This series adds a two-phase check to prevent booting with lockdown
> enabled and IOMMU disabled:
>
> 1. Early check (in lockdown_lsm_init()): On x86, check the no_iommu
> flag, which is set early by the "iommu=off" kernel cmdline option.
> If lockdown is active and no_iommu is set, panic with a clear error.
>
> 2. Late check (late_initcall): On all architectures, check
> iommu_is_available() which returns true if any IOMMU driver
> registered successfully. This catches cases where:
> - IOMMU hardware is absent on the platform
> - IOMMU was disabled by driver initialization failure
> - IOMMU was not detected (broken firmware, missing ACPI tables)
>
> This follows the precedent set by s390 UV code which panics when
> security cannot be guaranteed ("System security cannot be guaranteed
> unless the system panics now").
>
> This also adds a generic iommu_is_available() API in the IOMMU
> subsystem, which is used by the lockdown check. Any IOMMU driver
> that successfully registers will automatically call
> iommu_set_available() from iommu_device_register().
>
> Signed-off-by: Mario Limonciello (AMD) <superm1@kernel.org>
>
> ---
> Mario Limonciello (AMD) (2):
> iommu: Add iommu_is_available() API
> security: lockdown: Prevent boot with lockdown but no IOMMU
>
> drivers/iommu/iommu.c | 48 ++++++++++++++++++++++++++++++++
> include/linux/iommu.h | 14 ++++++++++
> security/lockdown/lockdown.c | 65 ++++++++++++++++++++++++++++++++++++++++++++
> 3 files changed, 127 insertions(+)
> ---
> base-commit: 6628e7d4c6b25c8d18f1345e3a20d21829aae7e4
> change-id: 20261014-lockdown-iommu-08c763d9f91dd
>
> Best regards,
> --
> Mario Limonciello <superm1@kernel.org>
>
>
next prev parent reply other threads:[~2026-11-11 7:30 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-02 14:00 Mario Limonciello (AMD)
2026-11-02 14:00 ` [PATCH 1/2] iommu: Add iommu_is_available() API Mario Limonciello (AMD)
2026-11-02 14:00 ` [PATCH 2/2] security: lockdown: Prevent boot with lockdown but no IOMMU Mario Limonciello (AMD)
2026-11-11 7:30 ` Xiu Jianfeng [this message]
2026-11-12 19:27 ` [PATCH 0/2] lockdown: Prevent booting with lockdown enabled but IOMMU disabled Mario Limonciello
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=44ac3423-0a51-4562-816a-fea881511afa@huawei.com \
--to=xiujianfeng@huawei.com \
--cc=iommu@lists.linux.dev \
--cc=jmorris@namei.org \
--cc=joro@8bytes.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-security-module@vger.kernel.org \
--cc=nicolas.bouchinet@oss.cyber.gouv.fr \
--cc=paul@paul-moore.com \
--cc=robin.murphy@arm.com \
--cc=serge@hallyn.com \
--cc=superm1@kernel.org \
--cc=will@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®