From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-ed1-f53.google.com (mail-ed1-f53.google.com [209.85.208.53]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 188BA1E5B63 for ; Sun, 21 Dec 2025 01:43:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.53 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766281390; cv=none; b=oRtU1Mbg0V9QygPksPXtyD2SToEccTKleTlVbfdnQNbdxMArNFfbhh11HB+HkYCLoKk9IAw+Wg4KYJf/C8Jz/Cs8zxymNc25cHXNP4GGeOmBRGz8Mss7r4SX8++sK1aWHjZnlGKNYu0OFm1nzSnNT2HITJ8SBs5YGA1Kr+/oSyw= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766281390; c=relaxed/simple; bh=zDutoCUcJC5KUV1zaO2F8pH53d/mYymyKDL8EVxDtN4=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=o/0ysrrjQ7FSWUi43jLRDxA/QJZAfQleSF4SEQVNMOAO2f7AlS8vvnKztfzLokHpZJwr+VyVXHkPpGfNSttc6GbLJalUx6rPedGavKUCWaJbH1IzVAhzoJqjsh/wJZrWGlUtRb+1LtULmgW5QtqdrpTVQv1k8jyZ3SFKXE9UTbM= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org; spf=pass smtp.mailfrom=chromium.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b=CgQNF2SM; arc=none smtp.client-ip=209.85.208.53 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="CgQNF2SM" Received: by mail-ed1-f53.google.com with SMTP id 4fb4d7f45d1cf-64b7b737eddso3188081a12.1 for ; Sat, 20 Dec 2025 17:43:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1766281387; x=1766886187; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=GXP2AYUno/m9zOnTlGzVwAr7evEHTglaPCKMGi0tEos=; b=CgQNF2SM9WLo4is3Twxyn95/5y2mi73ayONtDR6bqURbF2ZEl8KrGWiLlz3wmYTCL1 IaVmUo/oC8Hm9BbXerZkFd/NINyyBBVOteg5z/YxeXSjXCblQGobQe89iz76NBsrCKMr dkuBs7tAZbOF92f47h3VZ8ORtM10ApdgrUOOI= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1766281387; x=1766886187; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=GXP2AYUno/m9zOnTlGzVwAr7evEHTglaPCKMGi0tEos=; b=FQaWQronB0mhf9afU8CN5enTxlMIXrySyXrnJ5vj+uXzAcaO11kv7wN457d/dUB0gG oAmCq7WAvJOnS0HvIKe+UbDNcRyivGFox/yzqF4aUYDzoinm16B5PZWkzY6Da+7Ona0x HOSOGXPwbsv3R1UWZ4sTUmsIwApY0bUqj2o7/RDrJSW2c5dy/QmFVe8zNfcg5rRegzeo FFLH2+Xt2Ae8rhPMTBQfkyhm+4fKCrnsVpC5vQhbec5s00clDAVHE5rs/oTqeF15krYD ZMGqrur6ZIemSNWNOUD29heQOGqq3/SfuFby+KPCErytyBOZUnVMLFnid+1P8whRV612 0Slw== X-Forwarded-Encrypted: i=1; AJvYcCUqlrY3NQo/6Z7Oy2t9JVmQ/SoHpmV0bMxdof6L0GU0Z+EBjyJXR1aFbvBH/lxGDWIJbl9OwcEoeAV1ge0=@vger.kernel.org X-Gm-Message-State: AOJu0YwlJ+CSnhAIUJV9bWSD24yXypOt4sqOrMWqX51gwFXQ59wqhY4x pXWy3KscRislFckO2+m3hzh0L78p0NAj/mNZYuRr/RKqdD4OyKZvsg6lVSTrQg4iiQ== X-Gm-Gg: AY/fxX6ou8KHq2a6FCPEVbYM5u9Lqjgdqgtk1a1IjyW7t8/7f3Yuk72CTsP9/9cf61I DT0n8jPPfKjDnl2hxSa6X7Ucvheq34TKvGNw172S6ODFrabGG2ja8VW8C8Sxav6lvXpVfyfQHJb W5KUnX87M/8PwNBQxQkdynPAla/X/fuRUEEvXN0loP30/moRFiHEF9Xk2oPPftHIp6Hb7OnljOB jVI/8QNUILVljQR8bM9YDESh8ZRxEMwwKyhWrIb5dL1+NFTi90Qg1+F3zeM/fwnS8RUou14lDYL Qx+J7ARQ9bwNnESHHuYurzMVCqQu3pCIe97nvjeFXr3d/uV+MF5S/2Cs7tLJSF7CaFnhr9+btBs fcIuM0UL00LNpYv47maLpFOc1FBVfjtENv6BoXu+Y/meoM77Eq0c8GNy13380RO+AlKquBCpkv1 JLTb+txAJDbEoNS3cnuHR6v/Vyy6kwC+JbmQt+DPJ0 X-Google-Smtp-Source: AGHT+IESK5mMwY1zy0Db+6R63Cf832kYS2WIorg+x5Tr6gnz07sfYPFNBr5QFMDqRL4FQ86hnjpA4g== X-Received: by 2002:a05:6402:2343:b0:641:3492:723d with SMTP id 4fb4d7f45d1cf-64b8eb73c83mr6940048a12.11.1766281387522; Sat, 20 Dec 2025 17:43:07 -0800 (PST) Received: from localhost.localdomain ([2a02:a31b:20c3:6680:4cc9:1698:dce5:4976]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-64b91494cd7sm6035057a12.16.2025.12.20.17.43.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 20 Dec 2025 17:43:07 -0800 (PST) From: Dmytro Maluka To: David Woodhouse , Lu Baolu , iommu@lists.linux.dev Cc: Joerg Roedel , Will Deacon , Robin Murphy , linux-kernel@vger.kernel.org, "Vineeth Pillai (Google)" , Aashish Sharma , Grzegorz Jaszczyk , Chuanxiao Dong , Kevin Tian , Dmytro Maluka Subject: [PATCH 0/2] iommu/vt-d: Ensure memory ordering in context & root entry updates Date: Sun, 21 Dec 2025 02:43:00 +0100 Message-ID: <20251221014302.17738-1-dmaluka@chromium.org> X-Mailer: git-send-email 2.47.3 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit As discussed in [1], we don't currently prevent the compiler from reordering memory writes when updating context entries, which is potentially dangerous, as it may cause setting the present bit (i.e. enabling DMA translation for the given device) before finishing setting up other bits in the context entry (and thus creating a time window when a DMA from the device may result in an unpredicted behavior). Fix this in the same way as how this is already addressed for PASID entries, i.e. by using READ_ONCE/WRITE_ONCE in the helpers used for setting individual bits in context entries, so that memory writes done by those helpers are ordered in relation to each other (plus, prevent load/store tearing and so on). While at it, similarly paranoidally fix updating root entries as well: use WRITE_ONCE to make sure that the present bit is set atomically together with the context table address bits, not before them. [1] https://lore.kernel.org/all/aTG7gc7I5wExai3S@google.com/ Dmytro Maluka (2): iommu/vt-d: Ensure memory ordering in context entry updates iommu/vt-d: Use WRITE_ONCE for setting root table entries drivers/iommu/intel/iommu.c | 2 +- drivers/iommu/intel/iommu.h | 37 +++++++++++++++++++++---------------- drivers/iommu/intel/pasid.c | 3 ++- 3 files changed, 24 insertions(+), 18 deletions(-) -- 2.47.3