lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [day] [month] [year] [list]
Message-Id: <20250131152913.2507-1-ilpo.jarvinen@linux.intel.com>
Date: Fri, 31 Jan 2025 17:29:13 +0200
From: Ilpo Järvinen <ilpo.jarvinen@...ux.intel.com>
To: Bjorn Helgaas <bhelgaas@...gle.com>,
	Jian-Hong Pan <jhp@...lessos.org>,
	linux-pci@...r.kernel.org,
	linux-kernel@...r.kernel.org
Cc: Ilpo Järvinen <ilpo.jarvinen@...ux.intel.com>,
	Niklāvs Koļesņikovs <pinkflames.linux@...il.com>
Subject: [PATCH 1/1] PCI/ASPM: Fix L1SS saving

The commit 1db806ec06b7 ("PCI/ASPM: Save parent L1SS config in
pci_save_aspm_l1ss_state()") aimed to perform L1SS config save for both
the Upstream Port and its upstream bridge when handling an Upstream
Port, which matches what the L1SS restore side does. However,
parent->state_saved can be set true at an earlier time when the
upstream bridge saved other parts of its state. Then later when
attempting to save the L1SS config while handling the Upstream Port,
parent->state_saved is true in pci_save_aspm_l1ss_state() resulting in
early return and skipping saving bridge's L1SS config because it is
assumed to be already saved. Later on restore, junk is written into
L1SS config which causes issues with some devices.

Remove parent->state_saved check and unconditionally save L1SS config
also for the upstream bridge from an Upstream Port which ought to be
harmless from correctness point of view. With the Upstream Port check
now present, saving the L1SS config more than once for the bridge is no
longer a problem (unlike when the parent->state_saved check got
introduced into the fix during its development).

Fixes: 1db806ec06b7 ("PCI/ASPM: Save parent L1SS config in pci_save_aspm_l1ss_state()")
Closes: https://bugzilla.kernel.org/show_bug.cgi?id=219731
Reported-by: Niklāvs Koļesņikovs <pinkflames.linux@...il.com>
Tested-by: Niklāvs Koļesņikovs <pinkflames.linux@...il.com>
Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@...ux.intel.com>
---
 drivers/pci/pcie/aspm.c | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/drivers/pci/pcie/aspm.c b/drivers/pci/pcie/aspm.c
index e0bc90597dca..da3e7edcf49d 100644
--- a/drivers/pci/pcie/aspm.c
+++ b/drivers/pci/pcie/aspm.c
@@ -108,9 +108,6 @@ void pci_save_aspm_l1ss_state(struct pci_dev *pdev)
 	pci_read_config_dword(pdev, pdev->l1ss + PCI_L1SS_CTL2, cap++);
 	pci_read_config_dword(pdev, pdev->l1ss + PCI_L1SS_CTL1, cap++);
 
-	if (parent->state_saved)
-		return;
-
 	/*
 	 * Save parent's L1 substate configuration so we have it for
 	 * pci_restore_aspm_l1ss_state(pdev) to restore.

base-commit: 72deda0abee6e705ae71a93f69f55e33be5bca5c
-- 
2.39.5


Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ