* [PATCH AUTOSEL 5.15 11/15] ata: libata-sata: Disallow changing LPM state if not supported
[not found] <20250803212206.3548990-1-sashal@kernel.org>
@ 2025-08-03 21:22 ` Sasha Levin
0 siblings, 0 replies; only message in thread
From: Sasha Levin @ 2025-08-03 21:22 UTC (permalink / raw)
To: patches, stable
Cc: Damien Le Moal, Niklas Cassel, Hannes Reinecke, Sasha Levin,
linux-ide
From: Damien Le Moal <dlemoal@kernel.org>
[ Upstream commit 413e800cadbf67550d76c77c230b2ecd96bce83a ]
Modify ata_scsi_lpm_store() to return an error if a user attempts to set
a link power management policy for a port that does not support LPM,
that is, ports flagged with ATA_FLAG_NO_LPM.
Signed-off-by: Damien Le Moal <dlemoal@kernel.org>
Reviewed-by: Niklas Cassel <cassel@kernel.org>
Reviewed-by: Hannes Reinecke <hare@suse.de>
Link: https://lore.kernel.org/r/20250701125321.69496-6-dlemoal@kernel.org
Signed-off-by: Niklas Cassel <cassel@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
LLM Generated explanations, may be completely bogus:
Based on my analysis of the commit and the surrounding code context,
here's my determination:
**Backport Status: YES**
This commit should be backported to stable kernel trees for the
following reasons:
1. **Fixes a clear bug**: Without this check, users can attempt to
change LPM policy on ports that don't support LPM (flagged with
ATA_FLAG_NO_LPM), which could lead to undefined behavior or system
issues. The code already prevents setting the policy but doesn't
inform the user that the operation failed.
2. **User-visible issue**: The bug allows sysfs writes to succeed
silently when they should fail with an error. This violates the
principle of least surprise - users expect operations to either
succeed or return an error, not silently fail.
3. **Small and contained fix**: The patch adds just 5 lines of code
(lines 927-930) that perform a simple flag check and return
-EOPNOTSUPP if the port doesn't support LPM. This is a minimal change
with low risk of regression.
4. **Consistency with existing checks**: The function already has
similar validation for device-level quirks (ATA_QUIRK_NOLPM at lines
934-937). This patch adds the missing port-level validation, making
the code more consistent and complete.
5. **Related to recent fixes**: Looking at recent commits (65b2c92f69d3,
4edf1505b76d), there's been work to properly handle ports that don't
support LPM. This patch completes that work by ensuring the sysfs
interface properly rejects invalid operations.
6. **Prevents potential hardware issues**: Attempting to set LPM
policies on hardware that doesn't support them could potentially
cause hardware malfunctions or unexpected behavior. This fix prevents
such attempts at the sysfs interface level.
The fix follows stable kernel rules: it's a clear bug fix, minimal in
scope, doesn't introduce new features, and addresses a real user-facing
issue where invalid operations appear to succeed when they should fail
with an appropriate error code.
drivers/ata/libata-sata.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/drivers/ata/libata-sata.c b/drivers/ata/libata-sata.c
index 04bdd53abf20..7cacb2bfc360 100644
--- a/drivers/ata/libata-sata.c
+++ b/drivers/ata/libata-sata.c
@@ -815,6 +815,11 @@ static ssize_t ata_scsi_lpm_store(struct device *device,
spin_lock_irqsave(ap->lock, flags);
+ if (ap->flags & ATA_FLAG_NO_LPM) {
+ count = -EOPNOTSUPP;
+ goto out_unlock;
+ }
+
ata_for_each_link(link, ap, EDGE) {
ata_for_each_dev(dev, &ap->link, ENABLED) {
if (dev->horkage & ATA_HORKAGE_NOLPM) {
--
2.39.5
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2025-08-03 21:22 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20250803212206.3548990-1-sashal@kernel.org>
2025-08-03 21:22 ` [PATCH AUTOSEL 5.15 11/15] ata: libata-sata: Disallow changing LPM state if not supported Sasha Levin
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).