public inbox for linux-arm-kernel@lists.infradead.org
 help / color / mirror / Atom feed
From: Sasha Levin <sashal@kernel.org>
To: patches@lists.linux.dev, stable@vger.kernel.org
Cc: Will Deacon <will@kernel.org>, Marc Zyngier <maz@kernel.org>,
	Sasha Levin <sashal@kernel.org>,
	catalin.marinas@arm.com, linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org
Subject: [PATCH AUTOSEL 7.0-6.12] drivers/virt: pkvm: Add Kconfig dependency on DMA_RESTRICTED_POOL
Date: Mon, 20 Apr 2026 09:19:29 -0400	[thread overview]
Message-ID: <20260420132314.1023554-175-sashal@kernel.org> (raw)
In-Reply-To: <20260420132314.1023554-1-sashal@kernel.org>

From: Will Deacon <will@kernel.org>

[ Upstream commit 61135967fa76d37883d90ccccc5a1cb73e90b94d ]

pKVM guests practically rely on CONFIG_DMA_RESTRICTED_POOL=y in order
to establish shared memory regions with the host for virtio buffers.

Make CONFIG_ARM_PKVM_GUEST depend on CONFIG_DMA_RESTRICTED_POOL to avoid
the inevitable segmentation faults experience if you have the former but
not the latter.

Reported-by: Marc Zyngier <maz@kernel.org>
Signed-off-by: Will Deacon <will@kernel.org>
Link: https://patch.msgid.link/20260330144841.26181-39-will@kernel.org
Signed-off-by: Marc Zyngier <maz@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---

LLM Generated explanations, may be completely bogus:

Based on my analysis, let me now write up the comprehensive assessment.

## Phase 1: Commit Message Forensics

**Step 1.1 - Subject Parse:**
- Record: [drivers/virt: pkvm] [Add] Adds Kconfig dependency on
  DMA_RESTRICTED_POOL to prevent misconfiguration.

**Step 1.2 - Tags:**
- Record: `Reported-by: Marc Zyngier <maz@kernel.org>` (subsystem
  maintainer hit this); `Signed-off-by: Will Deacon`; `Link:` to lore;
  `Signed-off-by: Marc Zyngier` as maintainer. No Fixes: tag, no Cc:
  stable tag.

**Step 1.3 - Body:**
- Record: Bug description is that pKVM guests use
  `CONFIG_DMA_RESTRICTED_POOL=y` to establish shared memory regions with
  host for virtio buffers. Without it, users experience "inevitable
  segmentation faults". Symptom = segfaults. No version info given.

**Step 1.4 - Hidden Bug Fix?:**
- Record: Yes, this is a clear build-time protection against a real
  runtime failure. The verb "Add" masks what is effectively a fix to
  prevent crashes from broken configurations.

## Phase 2: Diff Analysis

**Step 2.1 - Inventory:**
- Record: 1 file (`drivers/virt/coco/pkvm-guest/Kconfig`), 1 line
  changed (`depends on ARM64` -> `depends on ARM64 &&
  DMA_RESTRICTED_POOL`). Scope: minimal / surgical.

**Step 2.2 - Code Flow:**
- Record: Before: ARM_PKVM_GUEST can be built with only ARM64. After:
  requires DMA_RESTRICTED_POOL too. Compile-time constraint only; no
  runtime code changes.

**Step 2.3 - Bug Mechanism:**
- Record: Category (h) Hardware workaround / build-time config fix
  (Kconfig dependency). Before fix, user could build a pKVM guest kernel
  lacking `DMA_RESTRICTED_POOL`; virtio buffer sharing via mem_encrypt
  ops (SHARE/UNSHARE) would then fail at runtime → segfaults described
  by Marc Zyngier.

**Step 2.4 - Fix Quality:**
- Record: Trivially correct. One-line Kconfig dependency. Zero
  regression risk: it can only prevent a misconfiguration; existing
  correct configs (with both enabled) are unaffected.

## Phase 3: Git History Investigation

**Step 3.1 - Blame:**
- Record: File touched only twice: original commit `a06c3fad49a50`
  (drivers/virt: pkvm: Add initial support..., Aug 2024, v6.12) and this
  fix. Driver has been stable for ~18 months.

**Step 3.2 - Fixes: Tag:**
- Record: None present. Bug is a design omission from `a06c3fad49a50`
  (v6.12), not a regression.

**Step 3.3 - File History:**
- Record: Only 4 commits touch pkvm-guest/ in total. Kconfig file only
  has 2 commits. Not part of a multi-patch prerequisite chain — this is
  patch 38/38 of a v5 series but the Kconfig change is self-contained.

**Step 3.4 - Author Context:**
- Record: Will Deacon is a core arm64 / kernel maintainer. Reported by
  Marc Zyngier (KVM/arm64 maintainer). Both are top-level subsystem
  authorities for this code.

**Step 3.5 - Dependencies:**
- Record: The Kconfig change is entirely self-contained. It does not
  require any other patch from the 38-patch series to apply or function.

## Phase 4: Mailing List / External Research

**Step 4.1 - Original Submission:**
- Record: `b4 dig -c 61135967fa76d` found the thread at
  `https://patch.msgid.link/20260330144841.26181-39-will@kernel.org`.
  Part of v5 series "KVM: arm64: Add support for protected guest memory
  with pKVM" (38 patches).

**Step 4.2 - Reviewers:**
- Record: Patch applied with `Signed-off-by: Marc Zyngier` as the
  KVM/arm64 maintainer taking it through his tree. Maintainer was the
  Reporter — strong trust signal.

**Step 4.3 - Bug Report:**
- Record: Marc Zyngier hit this directly while testing; no external
  syzbot/bugzilla URL.

**Step 4.4 - Series Context:**
- Record: Series revisions v1→v5. Committed version matches v5/final.
  The Kconfig patch (38/38) is a standalone cleanup tail of the series;
  not dependent on other patches.

**Step 4.5 - Stable Discussion:**
- Record: Not explicitly nominated for stable in the thread (confirmed
  no `Cc: stable` anywhere in mbox thread for this patch).

## Phase 5: Code Semantic Analysis

**Step 5.1 - Key Functions:**
- Record: No function-level changes. Kconfig-only diff.

**Step 5.2 - Callers:**
- Record: `CONFIG_ARM_PKVM_GUEST` controls build of
  `drivers/virt/coco/pkvm-guest/arm-pkvm-guest.c` which registers
  `pkvm_crypt_ops` via `arm64_mem_crypt_ops_register()` (mem_encrypt
  SHARE/UNSHARE). These operations are invoked when DMA bounce-buffer
  infrastructure from `DMA_RESTRICTED_POOL` performs shared-memory setup
  for virtio.

**Step 5.3 - Callees:**
- Record: `pkvm_init_hyp_services()` hooks
  `arm64_mem_crypt_ops_register()` and
  `arm64_ioremap_prot_hook_register()`. Without `DMA_RESTRICTED_POOL`,
  SWIOTLB restricted pool isn't available so buffers for virtio never
  get properly set up as shared → faults.

**Step 5.4 - Reachability:**
- Record: Any pKVM-protected guest doing virtio I/O is affected —
  entirely userspace-reachable (network, block, console virtio devices).

**Step 5.5 - Similar Patterns:**
- Record: Similar explicit `depends on` patterns exist for many "coco"
  guest drivers (TDX, SEV) which have their own DMA infrastructure
  requirements.

## Phase 6: Cross-referencing and Stable Tree Analysis

**Step 6.1 - Does buggy code exist in stable?:**
- Record: `ARM_PKVM_GUEST` driver and its Kconfig entry exist in every
  stable tree from v6.12 onwards (confirmed `git tag --contains
  a06c3fad49a50` returns v6.12+). The broken config scenario exists in
  6.12.y, 6.13+ rolling and 7.0.y.

**Step 6.2 - Backport Complications:**
- Record: The stable tree (`stable/linux-7.0.y`, HEAD) currently has
  `depends on ARM64` only (confirmed by reading the file). Patch will
  apply with no modifications. Same applies to 6.12.y–6.x.y.

**Step 6.3 - Related fixes in stable:**
- Record: No earlier or alternate fix; this is the first and only fix
  for this dependency issue.

## Phase 7: Subsystem Context

**Step 7.1 - Criticality:**
- Record: drivers/virt/coco (confidential computing) = PERIPHERAL
  driver-specific, but failure mode is crash.

**Step 7.2 - Activity:**
- Record: Low activity (only 4 commits total in pkvm-guest/). The driver
  is relatively new (v6.12+) but stable in terms of scope.

## Phase 8: Impact / Risk Assessment

**Step 8.1 - Affected:**
- Record: arm64 users building a kernel with `ARM_PKVM_GUEST=y` and
  running as a pKVM protected guest, lacking `DMA_RESTRICTED_POOL=y`.
  arm64 defconfig already sets it since 6.3, so defconfig users are not
  impacted; the victims are custom-kernel builders (research, vendor
  builds, embedded).

**Step 8.2 - Trigger:**
- Record: Trigger = any virtio I/O in a pKVM guest with the broken
  config. Happens early at boot for most virtio-equipped guests.

**Step 8.3 - Severity:**
- Record: Failure mode = segmentation faults (crashes). Severity = HIGH
  (system unusable / crash). Upstream maintainer (Marc Zyngier) was
  personally affected.

**Step 8.4 - Risk vs Benefit:**
- Record: BENEFIT: prevents crashes for misconfigured pKVM guest builds,
  and documents the implicit dependency. RISK: near-zero — it's a one-
  line Kconfig constraint that can only REFUSE previously broken
  configs; existing working builds (including defconfig) are not
  affected.

## Phase 9: Synthesis

**Step 9.1 - Evidence:**
- FOR: One-line Kconfig dependency; reported by subsystem maintainer;
  signed off by maintainer; prevents segfaults; obviously correct;
  applies cleanly; no runtime changes; falls into the documented "Build
  fixes / Kconfig dependency fixes" stable exception category.
- AGAINST: Not tagged for stable; part of a large new-feature series
  (though the patch itself is standalone); niche effect (only
  misconfigured builds); defconfig users already unaffected.

**Step 9.2 - Rules Checklist:**
1. Obviously correct: YES (trivial Kconfig edit).
2. Fixes a real bug: YES (crashes reported).
3. Important (crashes): YES (segfaults = HIGH severity).
4. Small / contained: YES (1 line).
5. No new features: YES (purely a constraint).
6. Applies cleanly: YES.

**Step 9.3 - Exception Category:**
- Record: Fits "Build fixes / Kconfig dependency fixes" documented
  exception.

**Step 9.4 - Decision:**
- YES: it's a safe, obvious, Kconfig-only crash-prevention fix that
  applies cleanly to v6.12+ stable trees.

## Verification

- [Phase 1] Parsed commit: `Reported-by: Marc Zyngier`, `Link:` to lore,
  no `Cc: stable`, no `Fixes:`.
- [Phase 2] Diff confirmed via `git show 61135967fa76d` — single line
  `depends on ARM64` → `depends on ARM64 && DMA_RESTRICTED_POOL`.
- [Phase 3] `git log --oneline -- drivers/virt/coco/pkvm-guest/Kconfig`:
  only 2 commits (origin + this fix).
- [Phase 3] `git show a06c3fad49a50` + `git tag --contains
  a06c3fad49a50`: original driver introduced in v6.12.
- [Phase 4] `b4 dig -c 61135967fa76d`: matched to v5 38/38 at
  `https://patch.msgid.link/20260330144841.26181-39-will@kernel.org`.
- [Phase 4] `b4 dig -a`: patch evolved v1→v5; applied version matches
  latest.
- [Phase 4] Inspected mbox thread `/tmp/pkvm-dma-restricted.mbx` for
  `Cc: stable`/`Fixes:` referencing this patch: none found for 38/38.
- [Phase 5] Read `drivers/virt/coco/pkvm-guest/arm-pkvm-guest.c` to
  confirm mem_encrypt SHARE/UNSHARE ops registration explains why
  DMA_RESTRICTED_POOL is needed for virtio.
- [Phase 6] `git show HEAD:drivers/virt/coco/pkvm-guest/Kconfig` on
  `stable/linux-7.0.y` shows `depends on ARM64` only — patch applies
  cleanly.
- [Phase 6] `git log --oneline -- drivers/virt/coco/pkvm-guest/` in the
  current checkout confirms only 4 total commits, no conflicting
  refactors.
- [Phase 7] `git log -S"CONFIG_DMA_RESTRICTED_POOL" --
  arch/arm64/configs/defconfig`: commit `09ea26f1bf31c` added it to
  defconfig in Jan 2023 (predates the driver).
- [Phase 8] Failure mode "segmentation faults" taken directly from
  commit message authored by Will Deacon and reporter Marc Zyngier;
  severity classification is mine based on described symptom.
- UNVERIFIED: I did not reproduce the segfault; I rely on the
  maintainer's description. I did not enumerate every downstream stable
  tree policy on Kconfig-only fixes — but this change is self-contained
  and independent.

**YES**

 drivers/virt/coco/pkvm-guest/Kconfig | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/virt/coco/pkvm-guest/Kconfig b/drivers/virt/coco/pkvm-guest/Kconfig
index d2f344f1f98f7..928b8e1668ccc 100644
--- a/drivers/virt/coco/pkvm-guest/Kconfig
+++ b/drivers/virt/coco/pkvm-guest/Kconfig
@@ -1,6 +1,6 @@
 config ARM_PKVM_GUEST
 	bool "Arm pKVM protected guest driver"
-	depends on ARM64
+	depends on ARM64 && DMA_RESTRICTED_POOL
 	help
 	  Protected guests running under the pKVM hypervisor on arm64
 	  are isolated from the host and must issue hypercalls to enable
-- 
2.53.0



  parent reply	other threads:[~2026-04-20 13:29 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20260420132314.1023554-1-sashal@kernel.org>
2026-04-20 13:17 ` [PATCH AUTOSEL 7.0-5.10] clk: spear: fix resource leak in clk_register_vco_pll() Sasha Levin
2026-04-20 13:17 ` [PATCH AUTOSEL 7.0-5.10] ARM: xen: validate hypervisor compatible before parsing its version Sasha Levin
2026-04-20 13:17 ` [PATCH AUTOSEL 7.0-6.19] wifi: mt76: avoid to set ACK for MCU command if wait_resp is not set Sasha Levin
2026-04-20 13:17 ` [PATCH AUTOSEL 7.0-6.18] phy: phy-mtk-tphy: Update names and format of kernel-doc comments Sasha Levin
2026-04-20 13:18 ` [PATCH AUTOSEL 6.18] ARM: dts: microchip: sam9x7: fix gpio-lines count for pioB Sasha Levin
2026-04-20 13:18 ` [PATCH AUTOSEL 7.0-6.18] drm/imx: parallel-display: add DRM_DISPLAY_HELPER for DRM_IMX_PARALLEL_DISPLAY Sasha Levin
2026-04-20 13:18 ` [PATCH AUTOSEL 7.0-6.1] ASoC: mxs-sgtl5000: disable MCLK on error paths of mxs_sgtl5000_probe() Sasha Levin
2026-04-20 13:18 ` [PATCH AUTOSEL 7.0-6.12] Bluetooth: btmtk: add MT7902 MCU support Sasha Levin
2026-04-20 13:18 ` [PATCH AUTOSEL 7.0-6.18] wifi: mt76: flush pending TX before channel switch Sasha Levin
2026-04-20 13:18 ` [PATCH AUTOSEL 7.0-6.6] wifi: mt76: fix list corruption in mt76_wcid_cleanup Sasha Levin
2026-04-20 13:18 ` [PATCH AUTOSEL 7.0-6.12] wifi: mt76: add missing lock protection in mt76_sta_state for sta_event callback Sasha Levin
2026-04-20 13:18 ` [PATCH AUTOSEL 7.0-6.1] Bluetooth: btmtk: improve mt79xx firmware setup retry flow Sasha Levin
2026-04-20 13:19 ` [PATCH AUTOSEL 7.0-6.18] wifi: mt76: mt7996: Disable Rx hdr_trans in monitor mode Sasha Levin
2026-04-20 13:19 ` Sasha Levin [this message]
2026-04-20 13:19 ` [PATCH AUTOSEL 7.0-6.12] wifi: mt76: mt7925: Skip scan process during suspend Sasha Levin
2026-04-20 13:19 ` [PATCH AUTOSEL 7.0-5.10] wifi: mt76: mt76x02: wake queues after reconfig Sasha Levin
2026-04-20 13:19 ` [PATCH AUTOSEL 7.0-6.12] wifi: mt76: mt7925: resolve link after acquiring mt76 mutex Sasha Levin
2026-04-20 13:19 ` [PATCH AUTOSEL 7.0-6.18] wifi: mt76: mt7996: fix queue pause after scan due to wrong channel switch reason Sasha Levin
2026-04-20 13:19 ` [PATCH AUTOSEL 6.18] ASoC: stm32_sai: fix incorrect BCLK polarity for DSP_A/B, LEFT_J Sasha Levin
2026-04-20 13:20 ` [PATCH AUTOSEL 7.0-6.12] net: ethernet: mtk_eth_soc: avoid writing to ESW registers on MT7628 Sasha Levin
2026-04-20 13:20 ` [PATCH AUTOSEL 6.18] media: rkvdec: reduce stack usage in rkvdec_init_v4l2_vp9_count_tbl() Sasha Levin
2026-04-20 13:20 ` [PATCH AUTOSEL 6.18] soc: aspeed: socinfo: Mask table entries for accurate SoC ID matching Sasha Levin
2026-04-20 13:20 ` [PATCH AUTOSEL 6.18] arm64: dts: imx93-9x9-qsb: change usdhc tuning step for eMMC and SD Sasha Levin
2026-04-20 13:20 ` [PATCH AUTOSEL 7.0-6.6] wifi: mt76: mt7996: reset device after MCU message timeout Sasha Levin
2026-04-20 13:20 ` [PATCH AUTOSEL 7.0] spi: stm32: fix rx DMA request error handling Sasha Levin
2026-04-20 13:21 ` [PATCH AUTOSEL 7.0-5.10] drm/mediatek: mtk_dsi: enable hs clock during pre-enable Sasha Levin
2026-04-20 13:21 ` [PATCH AUTOSEL 7.0-6.18] wifi: mt76: mt7996: fix frequency separation for station STR mode Sasha Levin
2026-04-20 13:21 ` [PATCH AUTOSEL 6.18] arm64: dts: imx8mq: Set the correct gpu_ahb clock frequency Sasha Levin
2026-04-20 13:22 ` [PATCH AUTOSEL 6.18] net: airoha: Fix memory leak in airoha_qdma_rx_process() Sasha Levin

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=20260420132314.1023554-175-sashal@kernel.org \
    --to=sashal@kernel.org \
    --cc=catalin.marinas@arm.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=maz@kernel.org \
    --cc=patches@lists.linux.dev \
    --cc=stable@vger.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